xcode OCMock -是否需要调用“verify”来Assert在mock对象上调用了一个方法?

bxgwgixi  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(110)

我对OCMockObject上的“verify”方法的作用感到困惑,是否有必要调用这个方法来测试是否在mock对象上调用了一个方法?即使在测试执行之后我没有真正调用“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];
pb3s4cty

pb3s4cty1#

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

  • “如果未调用预期的方法,则verify方法将引发异常。“*

还有这个

  • “当一个方法在一个没有使用expect或stub设置的mock对象上被调用时,mock对象将引发一个异常。这种快速失败模式可以通过创建一个“nice”mock来关闭:“*

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

xpcnnkqh

xpcnnkqh2#

通过OCMock验证方法,我们可以检查预期的方法是否被调用。
1.如果你想检查方法不应该被调用,那么你可以检查:

XCTAssertThrows([[mockObject verify] classMethod:OCMOCK_ANY]);
  • 当它通过一个异常,如果它没有在任何方法中调用 *

1.如果你想检查方法应该被调用,那么你可以检查通过:

XCTAssertNoThrow([[mockObject verify] classMethod:OCMOCK_ANY]);
  • 因为它不会通过异常,如果它在任何方法中调用 *

这对我来说是有效的,我希望它能有效。

相关问题