有没有办法验证一个方法是否被调用了“x”次?
问问题
7002 次
3 回答
21
查看 OCMock的测试文件,您似乎需要拥有与expect
调用相同数量的 s。所以如果你打电话someMethod
三次,你需要做...
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
不过这看起来很难看,也许你可以把它们放在一个循环中?
于 2011-03-25T16:05:27.907 回答
13
通过利用委托给一个块的能力,我取得了成功:
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) { ++调用计数; }); // ...练习代码... int 预期NumberOfCalls = 2; XCTAssertEqual(callCount, expectedNumberOfCalls); }
每次调用该块时都应调用该块someMethod
,因此callCount
应始终与实际调用该方法的次数相同。
于 2014-11-13T06:08:17.360 回答
3
如果你需要检查一个方法是否只被调用一次,你可以这样做
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];
于 2017-11-30T14:40:23.587 回答