如何使用OCMock验证方法调用的数量

时间:2011-03-25 15:33:19

标签: iphone objective-c unit-testing ocmock

有没有办法验证方法是否已被调用' x'多少次?

3 个答案:

答案 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];