有没有方法可以验证某个方法被称为'x'次数?如何验证使用OCMock的方法调用次数
回答
查看OCMock的test file,看起来您需要拥有与您打电话相同数量的expect
。所以,如果你someMethod
三次,你需要做的......
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
这似乎难看不过,也许你可以把它们放在一个循环?
我已经通过利用委托给一个块的能力,取得了成功:
OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation)
{ /* block that handles the method invocation */ });
块里面,我只是增加一个callCount
变量,然后断言,它调用的预期数量相匹配。例如:
- (void)testDoingSomething_shouldCallSomeMethodTwice { id mock = OCMClassMock([MyClass class]); __block int callCount = 0; OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation) { ++callCount; }); // ...exercise code... int expectedNumberOfCalls = 2; XCTAssertEqual(callCount, expectedNumberOfCalls); }
块应该每次someMethod
被调用被调用,所以callCount
应始终是相同的次数的方法实际上被称为号码。
然后,您必须对所有类存根方法执行此操作,并且不能调用'OCMVerifyAll(mock)',对吧?你知道现在的OCMock版本还是最好的吗? (OCMockito似乎在这方面有更好的支持。) – Drux 2015-02-15 20:22:25
我同意我希望OCMock能够更好地支持'''OCMVerify(stub,callCount)''',但是这个效果很好。很好的答案。 – 2015-04-16 17:53:21
类似的想法:使用[OCMArg checkWithBlock:]并更新该块的callCount。但不知何故,这不能按预期工作。对于每个方法调用,checkWithBlock被调用2次。 – JanR 2016-12-16 11:29:57
如果需要检查,如果一个方法只叫一次,你可以做这样的
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];
- 1. 使用OCMock验证一个方法是否被调用
- 2. 如何使用OCMock或OCMockito验证对NSURLProtocol模拟的方法调用?
- 3. 如何使用OCMock验证静态方法
- 4. Mockito,如何验证上次调用方法的参数
- 5. 验证使用Moq调用受保护方法的次数
- 6. 验证从另一个对象调用方法OCMock
- 7. OCMock - 验证方法调用的顺序。有没有其他方法?
- 8. Mockito验证方法调用一次
- 9. 如何在objective-C中使用模拟和验证OCMock的方法?
- 10. 如何使用指定参数设置/验证方法调用
- 11. 如何验证部分模拟有一个使用ocmock的args调用的基础方法?
- 12. 使用未知数的方法调用OCMock
- 13. 如何验证方法被调用
- 14. 我如何验证一个方法被调用n次?
- 15. 如何验证一个方法与Moq完全调用一次?
- 16. 如何验证一个方法被调用两次与mockito验证()
- 17. 使用Moq验证方法调用
- 18. 如何在方法调用后验证方法参数?
- 19. JMockit验证注入方法调用两次不同的参数
- 20. 如何验证方法只能用期望的参数调用?
- 21. Mockito验证方法调用
- 22. 使用MockFor,如何验证一个方法被调用至少n次?
- 23. 如何使用特定参数调用验证方法一次,但忽略与其他争论的调用?
- 24. OCMock验证失败
- 25. 使用Moq调用方法的验证方法
- 26. 如何使用Machine.Fakes.Moq来验证方法被调用?
- 27. 如何使用PowerMock验证两个静态方法调用?
- 28. 如何使用验证方法?
- 29. Mockito:使用函数参数调用验证方法
- 30. 如何使用intent params来验证调用onActivityResults()方法的调用者?
我认为这只是验证该方法被调用至少3倍,所以它会如果被称为4次,也会通过。 – 2014-01-22 13:56:46
我对v2.2.3的测试表明,需要准确匹配期望数量和调用someMethod – Skotch 2014-04-03 22:52:42
@dB&Skotch的次数:这取决于您使用的模拟类型 - 如果您创建了一个niceMock它期望'至少'数字 - 对于通常的模拟,它期望我使用OCMock 3.x的准确数字 – 2015-01-06 14:50:59