Я добился успеха, используя возможность делегировать блоку:
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
всегда должно совпадать с количеством раз, которое метод был фактически вызван.