我对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];
答案 0 :(得分:2)
OCMock网站上的功能描述包含:
“如果尚未调用预期的方法,则验证方法将引发异常。”
和此:
“在未使用expect或stub设置的模拟对象上调用方法时,模拟对象将引发异常。可以通过创建”nice“来关闭此失败快速模式mock:“
所以,是的,当您调用意外方法时会引发异常。但是,上面的示例表明,即使未调用verify,也不会调用期望的方法时会引发异常。这似乎不可能,因为如果你不调用验证,则没有进入OCMock的代码路径。在你的情况下,从哪里引发异常,即什么是异常的堆栈跟踪?是否有可能在另一个调用验证的测试中重用模拟视图? 控制器实例是否在测试之间保持不变?