0

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

例如:

在测试方法中

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];
4

1 回答 1

2

OCMock 网站上的功能描述如下:

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

还有这个:

“当一个方法被调用一个没有用期望或存根设置的模拟对象时,模拟对象将引发异常。这种快速失败模式可以通过创建一个“不错的”模拟来关闭:”

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

于 2012-07-12T15:42:02.393 回答