我想验证函数是否未被调用。该函数在测试函数内部的异步 block 调用中执行,因此 OCMReject()
不起作用。
我测试异步函数是否确实被调用的方法如下:
id mock = OCMClassMock([SomeClass class]);
OCMExpect([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
如何进行测试以测试是否未调用禁止的函数? 像这样的东西:
VerifyNotCalled([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
最佳答案
我建议使用 OCMStrictClassMock
而不是 OCMClassMock
(它给你一个很好的模拟)。如果调用任何您没有 stub 或期望的方法,严格模拟将立即使您的测试失败,这使您的测试更加严格。
如果这不是您的选择,您可以执行您描述的操作:
OCMReject([mock methodThatShouoldExecute]);
请参阅 OCMock docs 中的“常规(良好)模拟的快速失败”部分.
现在至于等待您的代码可能调用禁止的方法,那是另一回事。您不能使用 OCMVerifyAllWithDelay
,因为它会在满足所有预期后立即返回,它不会等待整整一秒来查看是否会对它进行非法调用。一种选择是在每次验证模拟之前等待 1 秒。理想情况下,您还可以使用 XCTestExpectation 显式等待您的异步任务。 .像这样的东西:
XCTestExpectation *asyncTaskCompleted = [self expectationWithDescription:@"asyncTask"];
// Enqueued, in an onCompletion block, or whatever call
// ... [asyncTaskCompleted fulfill]
[self waitForExpectationsWithTimeout:1 handler:nil]
关于objective-c - 如何使用 OCMock 验证异步方法未在 Objective C 中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48780467/