2012-01-24 14 views
7

En el siguiente ejemplo:Asegurar métodos no-burlado no son llamados en Mockito

Execution execution = mock(Execution.class); 
    when(execution.getLastQty()).thenReturn(1000.0); 
    when(execution.getLastPrice()).thenReturn(75.0); 

    order.onFillReceived(execution); 

    assertEquals(0, order.getLeavesQty(), 0); 

ejecución tiene muchos otros métodos que no debe ser llamado. Solo los dos métodos que se han burlado se deben usar dentro de esta prueba y se deben llamar. Si se llaman otros métodos, la prueba debería fallar.

¿Cómo le digo a Mockito que falle si se llaman otros métodos?

+1

¿Por qué le gustaría? Si la clase 'Order' llama a otros métodos de la clase' Execution' y no afecta el resultado del comportamiento que estás probando, ¿por qué quieres que la prueba falle? –

+0

En este caso particular ... digamos que order.onFillReceived termina asignando order.getLeavesQty según el método de execution.getWrongQty(). Como getWrongQty devolverá el valor predeterminado para ese método (0), la afirmación seguirá funcionando aunque getLeavesQty no se establezca con el valor correcto. Esto es solo porque el valor predeterminado para valores incorrectos es el mismo valor que lo que se afirma en la prueba. – user465342

+0

No lo entiendo del todo. Pero, ¿no sería más limpio elegir valores para la prueba que no pueden suceder fácilmente por accidente? De modo que si la prueba pasa, usted sabe que el cálculo ha sucedido correctamente. Si la prueba no demuestra que se calculó el valor correcto (en lugar de hacerlo por accidente), cuestionaría el valor de la prueba. –

Respuesta

8

El documentation cubre esto explícitamente. Al que desea llamar verifyNoMoreInteractions, ya sea después de llamar verify (según la documentación) o

verify(execution).getLastQty(); 
verify(execution).getLastPrice(); 
verifyNoMoreInteractions(execution); 

o el uso de ignoreStubs:

verifyNoMoreInteractions(ignoreStubs(execution)); 
+0

Agregando esto falla la prueba quejándose de ... No se buscan interacciones aquí. – user465342

+0

Por otro lado ... si se usa ignoreStubs (disponible en 1.9), lo anterior funciona correctamente. El código real es verifyNoMoreInteractions (ignoreStubs (ejecución)); – user465342

+0

@ user465342: Bueno, eso depende de lo que estabas tratando de hacer. No has mostrado lo que hace 'onFillReceived' - Sospecho que si solo llama a' getLastQty() 'y' getLastPrice() 'una vez cada uno, entonces lo anterior estaría bien, creo. Pero sí, si quieres tratarlos como métodos stub, 'ignoreStubs' parece el camino correcto. –

0

puede probar con el Nunca método si eso encaja el caso de uso:

es decir

verify(execution, never()).someOtherMethod(); 
Cuestiones relacionadas