JUnit 4 y Suspend-on-Exception

Cuando se lanza una excepción no detectada en mi código, estoy acostumbrado a que el depurador se detenga en la instrucción de lanzamiento para poder examinar las variables locales y los miembros de todos los objetos involucrados en el momento en que se lanzó la excepción. ConIntelliJ Idea Esto se puede lograr yendo acorrer, Ver puntos de interrupción, seleccionando elPuntos de interrupción de excepción pestaña, comprobandoCualquier excepción, y asegurándose de que elExcepción capturada casilla de verificación no está marcada, mientras queExcepción no capturada casilla de verificación está marcada. ConEclipse y conEstudio visual (para C #) es algo diferente, pero en la misma línea.

La capacidad de hacer que el depurador se comporte de esta manera es extremadamente útil; tan útil de hecho, que estructuro el bucle principal de mis programas en consecuencia: en la versión de lanzamiento, el bucle principal está, por supuesto, incrustado dentro de un try-catch-all; pero en la versión de depuración, no hay un bloque try-catch en el bucle principal, por lo que cualquier excepción que no se detecte en cualquier lugar dentro de mi programa permanecerá sin ser detectada, por lo que el depurador suspenderá mi programa en el momento en que se lance.

Al probar mis clases de Java con JUnit, sin embargo, tengo un problema: el depurador no se detiene en ninguna excepción. En cambio, lo que sucede es que no solo se esperan excepciones inesperadas, sino también inesperadas, y se me da un seguimiento de la pila de excepciones post mortem para intentar y darle sentido. Eso no es muy bueno.

Solía ​​pensar que esto está sucediendo porque JUnit hace uso dejava.lang.reflect.Method.invoke(), que atrapa todas las excepciones y las transforma aTargetInvocationExceptions, pero luego escribí mi propio corredor JUnit personalizado, que conoce mi clase de prueba personalmente y invoca directamente sus métodos sinMethod.invoke(), y el problema persiste. Esto significa que el problema se encuentra en el núcleo de JUnit.

Entonces, ¿alguien más tiene el mismo problema? ¿Alguien sabe de una solución para que podamos hacer que el depurador suspenda la ejecución del programa en excepciones inesperadas mientras probamos con JUnit?

Pregunta relacionada (sin respuesta):Suspender en las excepciones de tiempo de ejecución no capturadas en Eclipse Junit test runner

Pregunta relacionada (sin respuesta):¿Cómo romper en el depurador dentro de un caso de prueba jUnit?

Pregunta relacionada (parcialmente respondida):Break on Exception en Eclipse usando jUnit (La respuesta aceptada dice que "si se depura un solo método en jUnit, los puntos de interrupción comienzan a funcionar. Si se depura una clase o paquete completo en jUnit, el depurador no funciona").

Respuestas a la pregunta(2)

Su respuesta a la pregunta