Ben*_*nie 5 xcode unit-testing asynchronous objective-c ocmock
我想验证一个函数没有被调用。该函数在测试函数内的异步块调用中执行,因此OCMReject()不起作用。
我测试是否确实调用了异步函数的方法如下:
id mock = OCMClassMock([SomeClass class]);
OCMExpect([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
Run Code Online (Sandbox Code Playgroud)
如何进行测试以测试是否未调用被禁止的函数?就像是:
VerifyNotCalled([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
Run Code Online (Sandbox Code Playgroud)
我建议使用 anOCMStrictClassMock而不是 the OCMClassMock(这会给你一个很好的模拟)。如果调用了您未存根或未预期的任何方法,严格模拟将立即使您的测试失败,这使您的测试更加严格。
如果这不适合您,您可以执行您所描述的操作:
OCMReject([mock methodThatShouoldExecute]);
Run Code Online (Sandbox Code Playgroud)
请参阅OCMock 文档中的“常规(良好)模拟的快速失败”部分。
现在至于等待你的代码可能调用禁止的方法,那就是另一回事了。您不能使用OCMVerifyAllWithDelay,因为一旦满足所有期望,它就会立即返回,它不会等待一整秒来查看是否会对其进行非法调用。一种选择是每次验证模拟之前等待 1 秒。理想情况下,您还可以使用XCTestExpectation显式等待异步任务。就像是:
XCTestExpectation *asyncTaskCompleted = [self expectationWithDescription:@"asyncTask"];
// Enqueued, in an onCompletion block, or whatever call
// ... [asyncTaskCompleted fulfill]
[self waitForExpectationsWithTimeout:1 handler:nil]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |