24

有没有办法验证一个方法是否被调用了“x”次?

4

3 回答 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 回答