propagacion - todas las excepciones en java
¿Se detectará un error de aserción en un bloque catch para la excepción java? (3)
Código:-
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
Si las declaraciones de afirmación fallan, me gustaría capturar el error en el bloque catch. Estoy tratando con el código anterior y no está sucediendo.
¿Se detectará el error de aserción en un bloque catch para la excepción de java?
Bueno, creo que estás usando JUnit para escribir tus pruebas. En ese caso, no debe capturar su Assert.assertEquals()
porque deberían pasar para la ejecución normal de la prueba. Si lanza alguna excepción, significa que su código no está funcionando como debería.
Casi has respondido tu propia pregunta. Su bloque catch no detectará el Error
AssertionError
que Assert
lanza si falla, porque es un Error
(o, más específicamente, extiende java.lang.Error
). Consulte la documentación para obtener más información sobre esto. Su bloque catch solo captura objetos Throwable
que se extienden java.lang.Exception
Si realmente quieres atraparlo, necesitas usar
catch (AssertionError e) {
...
Sin embargo , como han mentioned others , esta es una forma muy inusual de usar aserciones: generalmente deben aprobarse y, si fallan, es muy inusual que desee continuar con la ejecución del programa. Es por eso que el fallo produce un Error
lugar de una Exception
. Puede leer más sobre (no) detectar el Error
en esta pregunta .
¿Está seguro de que no solo desea una prueba, if ( variableName == "1")
?
NB: si está probando el código auxiliar de prueba de unidad, como un emparejador, podría tener sentido detectar el AssertionError
.
Si desea detectar los errores de esa manera, necesita algo como lo siguiente:
if (num == 1 || num == 2) {
throw new Exception();
}
Puede crear su propia clase de excepción y pasar el mensaje que desee.