2

我是 OCMock 的新手,我正在尝试测试是否调用了一个方法,但我希望该方法是一个存根,因为它包含其他我不想在当前测试中测试的加载方法。

- (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];
}

由于某种原因,测试失败了,就好像它从未被调用过(但我可以通过它并验证它是否被调用,以及它是一个存根。

这是错误:

OCPartialMockObject[RootViewController]: expected method was not invoked: loadChildViewControllers

我错过了什么?

4

1 回答 1

2

尝试删除此行:

[(RootViewController*)[mockRootViewController stub] loadChildViewControllers];

当您expect使用该方法时,它具有存根的副作用,因此stub没有必要。我怀疑正在发生的事情是您的记录器在记录器有机会匹配它stub之前就吞下了调用。expect

于 2013-04-10T17:20:44.257 回答