2011-06-16 16 views
15

Soy nuevo en Mockito y quiero usarlo en pruebas unitarias.Lanzar excepción en lugar de devolver el valor predeterminado

Lo que no me gusta son los simulacros creados con Mockito.mock(Class<T>) valores por defecto de devolución (como null) para los métodos que no tienen un comportamiento explícitamente definido. En cambio, quiero que emitan una excepción en este caso, así que sé que necesito agregar esta definición.

He intentado lo siguiente:

SomeType m = mock(SomeType.class, new ThrowsException(new SomeRuntimeException(...))); 
when(m.a()).thenReturn(...); 

m.a(); // ok 
m.b(); // throws exception 

Pero eso no funcionará porque la excepción ya está lanzada durante la llamada a when().

¿Hay alguna otra forma de lograr esto?

+0

+1: caso de uso interesante! Nunca había pensado en este :-) –

Respuesta

13

Reemplazar

when(m.a()).thenReturn(...);

con

doReturn(...).when(m).a();

+0

+1 ¡Gracias! El javadoc de doReturn explica la diferencia entre las dos líneas. También refiere exactamente mi caso. :-) – Wolfgang

+2

Me pregunto cuál es el motivo de Mockito para no proporcionar una forma de lanzar una excepción para los métodos no levantados. Usar una respuesta predeterminada de ThrowsException + doReturn funciona, pero significa que nunca se puede usar 'cuándo', que es el método preferido. –

+0

¿Te refieres a algo como lo siguiente: Mockito.doThrow (new RuntimeException()) cuando (m) .a(); – fivanski

Cuestiones relacionadas