OCMock - 呼叫"验证"需要声明在模拟对象上调用方法?

时间:2012-07-05 21:54:47

标签: objective-c ios xcode ocmock

我对OCMockObject上的“验证”方法有什么困惑,是否有必要调用它来测试是否在模拟对象上调用了一个方法?即使我在测试执行后实际上没有调用“verify”,如果我没有完全设置对模拟对象调用方法的期望,我仍然会得到测试失败。

例如:

在测试方法中

OCMockObject *mockView = [OCMockObject mockForClass:[UIView class]];
[controller setValue:mockView forKey:@"sampleView"];
[[mockView expect] setHidden:YES];
[controller processSampleView];
//do I need to call "verify" here?
//    If I don't, I still get test failures if "setHidden:YES" is not called...
[mockView verify];

1 个答案:

答案 0 :(得分:2)

OCMock网站上的功能描述包含:

“如果尚未调用预期的方法,则验证方法将引发异常。”

和此:

“在未使用expect或stub设置的模拟对象上调用方法时,模拟对象将引发异常。可以通过创建”nice“来关闭此失败快速模式mock:“

所以,是的,当您调用意外方法时会引发异常。但是,上面的示例表明,即使未调用verify,也不会调用期望的方法时会引发异常。这似乎不可能,因为如果你不调用验证,则没有进入OCMock的代码路径。在你的情况下,从哪里引发异常,即什么是异常的堆栈跟踪?是否有可能在另一个调用验证的测试中重用模拟视图? 控制器实例是否在测试之间保持不变?