Mockito prueba un método vacío arroja una excepción


399

Tengo un método con un voidtipo de retorno. También puede arrojar una serie de excepciones, por lo que me gustaría probar esas excepciones. Todos los intentos han fallado por la misma razón:

El método cuando (T) en el tipo Stubber no es aplicable para los argumentos (nulo)

¿Alguna idea de cómo puedo obtener el método para lanzar una excepción específica?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Respuestas:


706

Los paréntesis están mal colocados. Debes usar

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

y no

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Esto se explica en la documentación.


77
@edwardmlyte Esta inconsistencia de Mockito es una de las razones por las que me he cambiado
Muel

@clement ambos se pueden usar: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Crear una excepción no la arroja.
JB Nizet

1
@JB Nizet Estoy totalmente de acuerdo con usted, pero si escribo doThrow (nueva Excepción ()) en lugar de doThrow (Exception.class), tengo el siguiente error cuando inicio mi prueba; Excepción esperada com.company.project.exception.ElementNotFoundException pero obtuvo org.mockito.exceptions.base.MockitoException:
clement

2
Haga otra pregunta, con el código bajo prueba, el código de la prueba y el seguimiento completo de la pila de la excepción.
JB Nizet

66
doThrow (nueva Excepción ()). when (objeto) .voidMethod (any ());
Soumyajit Swain

14

Si alguna vez se preguntó cómo hacerlo utilizando el nuevo estilo BDD de Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

Y para futuras referencias, uno puede necesitar lanzar una excepción y luego no hacer nada:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
Gracias por publicar esto aquí; si el método devuelve un valor: given (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); si el método no devuelve nada: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Explicación del formulario javadoc: "Stubbing vacíos requiere un enfoque diferente de {@link Mockito # when (Object)} (o BDDMockito.given) porque al compilador no le gustan los métodos vacíos entre paréntesis ..."
Wolf359
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.