Pruebas en JUnit para verificar que la excepción sea capturada en el nivel de jerarquía correcto.
Tengo una serie de clases que se llaman entre sí y propagan una excepción. Quiero escribir una prueba en JUnit que verifique que la excepción se capturó en el nivel correcto y no antes.
¿Cómo puedo hacer eso?
Por ejemplo, si tengo:
clase A lanza excepción
clase B (llamada A) lanza excepción
clase C (llamada B) captura la excepción
Si alguien capturó la excepción en clase B, deseo que la prueba falle.
¡Gracias!
davy.ai
Para probar que la excepción fue capturada en el nivel correcto, puedes utilizar el mecanismo de prueba de excepciones de JUnit.
@Test(expected = <excepción>)
, donde<excepción>
es el tipo de excepción que se espera que se lance.Luego, escribe el código de prueba que desencadene la excepción llamando al método apropiado.
Por último, agrega código adicional para verificar que la excepción no fue capturada por ningún otro método antes de llegar al nivel esperado. Por ejemplo, puedes añadir un bloque try-catch después de llamar al método que debería desencadenar la excepción, y asegurarte de que la excepción capturada no sea la excepción esperada.
Aquí tienes un ejemplo de clase de prueba que demuestra este enfoque:
En este ejemplo, tenemos tres clases
A
,B
yC
que se llaman entre sí y propagan una excepción. La claseA
lanza la excepción, la claseB
la captura y lanza una excepción diferente, y la claseC
captura la excepción lanzada por la claseB
.El primer método de prueba
pruebaPropagacionExcepcion
verifica que la excepción se propague al nivel correcto llamando al métodollamarB
de la claseC
, lo cual debería desencadenar la excepción lanzada por la claseA
.El segundo método de prueba
pruebaExcepcionNoCapturadaPorB
verifica que la excepción no sea capturada en el nivel incorrecto llamando al métodollamarA
de la claseB
, lo cual debería desencadenar la excepción lanzada por la claseA
. El bloque try-catch captura cualquier excepción lanzada por la claseB
, y el métodoassertNotEquals
verifica que la excepción capturada no sea de la claseClaseExcepcionCapturadaIncorrecta
esperada.</excepción></excepción>