Как проверить количество вызовов методов с помощью OCMock - PullRequest
22 голосов
/ 25 марта 2011

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

Ответы [ 3 ]

20 голосов
/ 25 марта 2011

Глядя на тестовый файл для OCMock, кажется, что вам нужно иметь такое же количество expect с, как и для вызовов. Поэтому, если вы звоните someMethod три раза, вам нужно сделать ...

[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];

...test code...

[mock verify];

Это кажется уродливым, может быть, вы можете поместить их в цикл?

12 голосов
/ 13 ноября 2014

Я добился успеха, используя возможность делегировать блоку:

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 голосов
/ 30 ноября 2017

Если вам нужно проверить, вызывается ли метод только один раз , вы можете сделать это следующим образом

[self.subject doSomething];
OCMVerify([self.mock method]);

OCMReject([self.mock method]);
[self.subject doSomething];
...