有没有办法验证方法是否已被调用' x'多少次?
答案 0 :(得分:20)
查看OCMock的test file,您似乎需要拥有与呼叫相同数量的expect
。因此,如果您拨打someMethod
三次,则需要执行...
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
这看起来很难看,也许你可以将它们放在一个循环中?
答案 1 :(得分:12)
通过利用委托给区块的能力,我获得了成功:
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
应始终与实际调用该方法的次数相同。
答案 2 :(得分:3)
如果您需要检查一个方法是否只被称为一次,您可以这样做
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];