Подтвердить что ты не робот

Как проверить количество вызовов методов с помощью OCMock

Есть ли способ проверить, что метод был вызван "x" количеством раз?

4b9b3361

Ответ 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];