objective-c - 如何使用 OCMock 正确测试此方法?

标签 objective-c unit-testing stub ocmock stubbing

我是 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/

相关文章:

ios - 单击 gmsmarker 时不会弹出信息窗口

ios - 旋转 avplayer 视频?

objective-c - 将位图数据存储在整数数组中以提高速度?

c# - 通过工厂问题和注意事项涉及实体创建的单元测试类

ios - 如何在 Xcode 的注入(inject)插件中使用可调应用程序参数?

python - 如何用模拟模拟只读属性?

测试软件: fake vs stub

javascript - 如何使用 sinon stub new Date()?

ruby - 如何使用 rspec 删除特定文件?

php - 如何在功能测试中模拟 Symfony 2 服务?