¿Hay alguna forma de verificar que un método se haya llamado 'x' cantidad de veces?Cómo verificar el número de llamadas a métodos usando OCMock
Respuesta
Mirando el test file para OCMock, parece que es necesario tener el mismo número de expect
s que tiene llamadas. Así que si usted llama someMethod
tres veces, lo que necesita hacer ...
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
Esto parece fea, sin embargo, tal vez usted puede poner en un bucle?
He tenido éxito mediante el aprovechamiento de la capacidad de delegar a un bloque:
OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation)
{ /* block that handles the method invocation */ });
Dentro del bloque, que sólo se incrementa una variable callCount
, y luego afirman que coincida 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 ser invocado cada vez someMethod
se llama, por lo callCount
siempre debe ser el mismo que el número de veces que el método se llama en realidad.
Debe hacer esto en todos los métodos apilados de clases y no puede llamar a 'OCMVerifyAll (mock)', ¿verdad? ¿Sabes que sigue siendo el mejor enfoque para las versiones actuales de OCMock? (OCMockito parece tener un mejor soporte en esta área.) – Drux
Estoy de acuerdo en que deseo que OCMock tenga un mejor soporte '' 'OCMVerify (stub, callCount)' '', pero esto funciona bien. Gran respuesta. –
Idea similar: utilice el [OCMArg checkWithBlock:] y actualice el callCount desde ese bloque. Pero de alguna manera esto no funciona como se esperaba. CheckWithBlock se llama 2 veces por cada llamada de método. – JanR
Si es necesario comprobar si un método sólo se llama vez, puede hacerlo de esta manera
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];
- 1. Cómo verificar varias llamadas a métodos con Moq
- 2. Cómo verificar varias llamadas a métodos con diferentes parametros
- 3. Reducir el número de llamadas a getTableCellRendererComponent
- 4. Cómo verificar el número de registros usando capybara
- 5. ¿Cómo puedo encadenar mis llamadas a métodos?
- 6. ¿Cómo encuentro las llamadas a los métodos?
- 7. JMock Permitir otras llamadas a métodos
- 8. ¿Cómo puedo usar OCMock para verificar que nunca se llame a un método?
- 9. Llamadas a métodos de interceptación en Python
- 10. Error al verificar muchas llamadas a funciones
- 11. OCMock: Protocolos de burla con la exclusión de métodos opcionales
- 12. JSTL, Frijoles y llamadas a métodos
- 13. Cómo verificar el # de líneas usando jQuery
- 14. Cómo verificar el último dígito del número
- 15. Usando una estructura con OCMock o Hamcrest
- 16. jprofiler u otro: ¿cómo puedo acumular llamadas a métodos recursivos?
- 17. Interceptar llamadas a métodos en PHP
- 18. Guardar y reutilizar el bloque para llamadas a métodos
- 19. Cómo gestiona CLR las llamadas a métodos externos en C#
- 20. Ser notificado de llamadas a métodos en .NET
- 21. ¿Cómo ignorar las llamadas a métodos inesperados en JUnit/easymock?
- 22. Ruby: Cómo encadenar varias llamadas a métodos junto con "enviar"
- 23. OCMock an NSOperation
- 24. Verificar el número de veces que se llama a un método protegido usando Moq
- 25. Lote: verificar el número de parámetros
- 26. Cómo recibir el número de llamadas y SMS perdidos
- 27. OCMock demorado verificar/ocuparse del tiempo de espera en pruebas unitarias
- 28. Código detrás de los métodos frente a Jquery Llamadas AJAX
- 29. ¿Cómo verificar el HOST usando ExpressJS?
- 30. Optimización del compilador de Java para llamadas a métodos repetidos?
Creo que esto sólo se verifica que el método ha sido llamado al menos 3 veces, por lo que se también pase si fue llamado 4 veces. –
Mi prueba con v2.2.3 muestra que debe haber una coincidencia exacta entre el número de espera y el número de llamadas a algún Método – Skotch
@dB y Skotch: esto depende del tipo de Mock que utilice, si crea un niceMock espera 'al menos' el número - para un simulacro habitual, espera el número exacto –