2009-12-29 10 views

Respuesta

11

De manera predeterminada, Easymock lanzará una excepción para los métodos que se invoquen y para los que no se establecieron expectativas explícitamente.

14

Desde el EasyMock documentation:

Niza Mocks

en un objeto devuelto por Mock maqueta() el comportamiento por defecto para todos los métodos consiste en lanzar una AssertionError para todas las llamadas de método inesperadas. Si desea un objeto simulado "agradable" que de forma predeterminada permita todas las llamadas al método y devuelva valores vacíos apropiados (0, nulo o falso), utilice niceMock() en su lugar.

Entonces, lo que está preguntando es el comportamiento predeterminado.

+0

Me resulta molesto el comportamiento predeterminado, ya que muy fácilmente se termina "requiriendo" en la prueba que el código que se prueba es ineficaz. Una vez hice un refactor simple de mover una llamada a getSomething() fuera de un bucle, lo que causó que la prueba fallara porque no llamé getSomething 40 veces (!), Y los simulacros "no agradables" fomentan este tipo de prueba (ya que fallaría si esperaba solo una llamada antes de la refactorización). –

+1

@Stein: de acuerdo. Las pruebas unitarias deben ser de grano fino, idealmente probar solo una cosa. burlas "no agradables" desalientan esto. –

+1

Por mi lectura de la pregunta, el OP quiere un simulacro que fallará la verificación si se llama. Los buenos simulacros no son lo que el OP quiere porque cuando se llama a un buen simulacro durante la prueba, todavía pasa la verificación. –

14

Sé que esta pregunta es muy antigua pero tuve la misma pregunta que el OP y eché un vistazo más. Encontré la siguiente solución:

Al agregar .andThrow(new AssertionFailedError()).anyTimes(); al final de su declaración de EasyMock, la prueba fallará cuando se llame al método simulado.

La razón por la cual esto es mejor que simplemente no usar NiceMock y dejar que la prueba falle debido a la llamada al método no bloqueado es porque esto permite probar específicamente que el método XYZ no fue llamado en el escenario dado.

Me gustaría dar crédito a David Wallace por esta respuesta. Encontré esta solución en su respuesta en la siguiente publicación: Test that void method didn't get called with EasyMock

+2

Creo que esta debería ser la respuesta aceptada. La razón es que las pruebas unitarias a menudo se cambian con nuevos requisitos y es muy fácil pasar por alto por qué no se estableció una expectativa falsa. Esta solución hace explícita la llamada al método que falta, por lo que exige más atención de la persona que cambia el código. – mindreader

Cuestiones relacionadas