Есть ли способ проверить, что метод был вызван "x" количеством раз?
Как проверить количество вызовов методов с помощью OCMock
Ответ 1
Глядя на тестовый файл для OCMock, кажется, что вам нужно иметь такое же количество expect
, что и у вас есть вызовы. Поэтому, если вы вызываете someMethod
три раза, вам нужно сделать...
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
Это кажется уродливым, может быть, вы можете поместить их в цикл?
Ответ 2
У меня был успех, используя способность делегировать блок:
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
всегда должен быть таким же, как количество раз, когда метод был фактически вызван.
Ответ 3
Если вам нужно проверить, вызван ли метод только один раз, вы можете сделать это следующим образом:
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];