我是 OCMock 新手,我正在尝试测试是否调用了一个方法,但我希望该方法是一个 stub ,因为它包含我不关心在当前测试中测试的其他加载方法。
- (void)setUp
{
self.rootViewController = [[RootViewController alloc] init];
}
- (void)tearDown
{
self.rootViewController = nil;
}
- (void)test_ViewDidLoad_DidCallLoadChildViewControllers
{
id mockRootViewController = [OCMockObject partialMockForObject:self.rootViewController];
[(RootViewController*)[mockRootViewController stub] loadChildViewControllers];
[(RootViewController*)[mockRootViewController stub] updateMainNavigation];
[[mockRootViewController expect] loadChildViewControllers];
// Force the view to load
self.rootViewController.view;
[mockRootViewController verify];
}
这是被调用的方法:
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadChildViewControllers];
[self updateMainNavigation];
}
由于某种原因,测试失败了,就好像它从未被调用过一样(但我可以单步执行它并验证它是否被调用,以及它是否是一个 stub 。
这是错误:
OCPartialMockObject[RootViewController]: expected method was not invoked: loadChildViewControllers
我错过了什么?
最佳答案
尝试删除此行:
[(RootViewController*)[mockRootViewController stub] loadChildViewControllers];
当您期望
该方法时,它会产生 stub (stub)的副作用,因此不需要 stub
。我怀疑发生的情况是,在 expect
记录器有机会匹配它之前,您的 stub
记录器就吞下了调用。
关于objective-c - 如何使用 OCMock 正确测试此方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917007/