iphone objective-c unit-testing ocmock

iphone - Cómo verificar el número de llamadas a métodos usando OCMock



objective-c unit-testing (3)

¿Hay alguna manera de verificar que un método haya sido llamado ''x'' cantidad de veces?


He tenido éxito al aprovechar la capacidad de delegar a un bloque:

OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation) { /* block that handles the method invocation */ });

Dentro del bloque, acabo de incrementar una variable callCount y luego afirmo que coincide con el número esperado de llamadas. Por ejemplo:

- (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); }

El bloque debe invocarse cada vez que se llama a someMethod , por lo que callCount siempre debe ser el mismo que el número de veces que se llamó realmente al método.


Si necesita verificar si un método solo se llama una vez , puede hacerlo de esta manera

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


Mirando el archivo de prueba para OCMock, parece que necesita tener el mismo número de llamadas esperadas que tiene. Entonces, si llama a someMethod tres veces, necesita hacerlo ...

[[mock expect] someMethod]; [[mock expect] someMethod]; [[mock expect] someMethod]; ...test code... [mock verify];

Aunque esto parece feo, ¿quizás puedas ponerlos en un bucle?