Saltar al contenido

lanzar excepciones marcadas de simulacros con Mockito

Solución:

Consulte la API de Java para ver la lista.
los get(int index) El método se declara para lanzar solo el IndexOutOfBoundException que se extiende RuntimeException.
Estás intentando decirle a Mockito que lance una excepción SomeException() es decir no es válido para ser lanzado por esa llamada de método en particular.

Para aclarar más.
La interfaz de lista no proporciona una excepción marcada para ser lanzada desde el get(int index) método y es por eso que Mockito está fallando.
Cuando creas el lista simulada, Mockito usará el definición de lista.class para crear su simulacro.

El comportamiento que está especificando con el when(list.get(0)).thenThrow(new SomeException()) no coincide con la firma del método en List API, porque get(int index) el método no arroja SomeException() entonces Mockito falla.

Si realmente quieres hacer esto, haz que Mockito lance un new RuntimeException() o incluso mejor lanzar un new ArrayIndexOutOfBoundsException() ya que la API especifica que esa es la única excepción válida que se lanzará.

Una solución alternativa es utilizar un willAnswer() método.

Por ejemplo, lo siguiente funciona (y no arroja un MockitoException pero en realidad lanza un cheque Exception como se requiere aquí) usando BDDMockito:

given(someObj.someMethod(stringArg1)).willAnswer( invocation -> { throw new Exception("abc msg"); });

El equivalente para Mockito llano sería usar el doAnswer método

Existe la solución con Kotlin:

given(myObject.myCall()).willAnswer {
    throw IOException("Ooops")
}

De donde viene dado

import org.mockito.BDDMockito.given

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *