Pregunta

Estoy tratando de tener uno de mis objetos burlado de lanzar una excepción comprobada cuando se llama a un método en particular. Estoy intentando lo siguiente.

@Test(expectedExceptions = SomeException.class)
public void throwCheckedException() {
    List<String> list = mock(List.class);
    when(list.get(0)).thenThrow(new SomeException());
    String test = list.get(0);
}

public class SomeException extends Exception {
}

Sin embargo, que produce el error siguiente.

org.testng.TestException: 
Expected exception com.testing.MockitoCheckedExceptions$SomeException but got org.mockito.exceptions.base.MockitoException: 
Checked exception is invalid for this method!
Invalid: com.testing.MockitoCheckedExceptions$SomeException

En cuanto a la documentación Mockito , que sólo utilizan RuntimeException, no es posible lanzar excepciones controladas desde un objeto de burla con Mockito?

¿Fue útil?

Solución

Comprobar la API Java para . El método get (int) se declara a tirar sólo el IndexOutOfBoundException que se extiende RuntimeException. Usted está tratando de decirle Mockito a un tiro de una excepción que no es válido para ser lanzada por esa llamada método en particular.

Para aclarar aún más. La interfaz de lista no prevé una excepción comprobada sea lanzada fuera del método get () y es por eso Mockito está fallando. Cuando se crea la lista burlado, Mockito usando la definición de List.class que crea su maqueta. El comportamiento que está especificando la when(list.get(0)).thenThrow(new SomeException()) no coincide con la firma del método en List.class, por lo Mockito falla. Si realmente quieres hacer esto, entonces Mockito lanzar una new RuntimeException() o incluso mejor lanzar una new ArrayIndexOutOfBoundsException() ya que las API que especifica que es la excepción sólo es válida para ser lanzado.

scroll top