你好,
我正在使用 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])
但测试仍然失败。
我想我错过了一些关于模拟的东西。
如有任何帮助,我们将不胜感激!谢谢
最佳答案
secondViewController
是一个实际的 SecondViewController。为了进行测试,您需要注入(inject)一个替代品。有几种不同的方法,但最干净的两种是:
- 构造函数注入(inject):将第二个 View Controller 传递给第一个 View Controller 的初始化器。生产代码将传入一个 SecondViewController。测试代码将传入一个模拟对象。
- 属性注入(inject):将 secondViewController 公开为属性。生产代码可以在呈现第一个 View Controller 之前将属性设置为 SecondViewController。测试代码可以将其设置为模拟对象。
有关更多信息,请参阅 How to Use Dependency Injection to Make Your Code Testable
关于ios - 不使用 OCMClassMock 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35574319/