try todas propagacion para numeros negativos manejo las excepciones errores ejemplos clase catch java junit try-catch assert

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.