使用OCMClassMock调用方法

时间:2016-02-23 10:00:59

标签: ios unit-testing ocmock

你好,

我正在使用OCMock编写单元测试,我无法理解为什么以下测试失败。 我试图从名为MyOtherViewController的类中测试此方法:

// private method of firstViewController
- (void)goToInitialViewController
{
    // type of secondViewController is SecondViewController
    [secondViewController showInitialViewController];
}

这是我写的测试:

- (void)testShowInitialVCCalledWhenGoToInitialVCCalled
{
    id secondVCMock = OCMClassMock([SecondViewController class]);

    FirstViewController *firstVC = [FirstViewController new];

    [firstVC goToInitialViewController];

    OCMVerify([secondVCMock showInitialViewController]);
}

我也尝试使用OCMPartialMock([SecondViewController new]),但测试仍然失败。 我错过了关于模拟的东西。

任何帮助将不胜感激!感谢

1 个答案:

答案 0 :(得分:1)

secondViewController是一个实际的SecondViewController。对于测试,您需要注入替代品。有几种不同的方式,但最清洁的是:

  1. 构造函数注入:将第二个视图控制器传递给第一个视图控制器的初始值设定项。生产代码将传递给SecondViewController。测试代码将传入模拟对象。
  2. 属性注入:将secondViewController公开为属性。生产代码可以在呈现第一个视图控制器之前将属性设置为SecondViewController。测试代码可以将其设置为模拟对象。
  3. 有关详情,请参阅How to Use Dependency Injection to Make Your Code Testable