如何使用OCMock验证在Objective C中不调用异步方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用OCMock验证在Objective C中不调用异步方法?相关的知识,希望对你有一定的参考价值。
我想验证没有调用函数。该函数在被测函数内的异步块调用中执行,因此OCMReject()
不起作用。
我测试过异步函数确实被调用的方式如下:
id mock = OCMClassMock([SomeClass class]);
OCMExpect([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
如何进行测试以测试是否未调用禁用函数?就像是:
VerifyNotCalled([mock methodThatShouoldExecute]);
OCMVerifyAllWithDelay(mock, 1);
答案
我建议使用OCMStrictClassMock
而不是OCMClassMock
(这给你一个很好的模拟)。如果调用了任何你没有存根或期望的方法,那么严格的模拟会立即使你的测试失败,这会使你的测试变得更加严格。
如果这不是你的选择,你可以做你所描述的:
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]
以上是关于如何使用OCMock验证在Objective C中不调用异步方法?的主要内容,如果未能解决你的问题,请参考以下文章