キャッチされない例外がコードでスローされた場合、例外がスローされた時点で関係するすべてのオブジェクトのローカル変数とメンバーを調べることができるように、例外がスローされたステートメントでデバッガーを停止することに慣れています。IntelliJ Ideaでは、Run、View Breakpointsに移動し、 Exception Breakpointsタブを選択し、Any exceptionをチェックし、 Caught exceptionチェックボックスがオフになっていることを確認し、 Uncaught exceptionチェックボックスがオンになっていることを確認します。EclipseとVisual Studio (C# 用) の場合は少し異なりますが、同じ方向に沿っています。
デバッガーをこのように動作させる機能は非常に便利です。実際、非常に便利なので、それに応じてプログラムのメイン ループを構成しています。リリース バージョンでは、メイン ループはもちろん try-catch-all 内に埋め込まれています。しかし、デバッグ バージョンでは、メイン ループに try-catch ブロックがないため、プログラム内のどこにもキャッチされていない例外はキャッチされずに残り、デバッガーは例外がスローされた時点でプログラムを中断します。
しかし、JUnit を使用して Java クラスをテストすると、問題が発生します。デバッガーが例外で停止しません。代わりに、予想されるだけでなく、予期しない例外も自動的にキャッチされ、事後分析の例外スタック トレースが与えられ、意味を理解しようとします。それはあまりクールではありません。
これは、JUnit がjava.lang.reflect.Method.invoke()
すべての例外をキャッチして に変換する を使用するために発生していると考えていましTargetInvocationExceptions
たが、その後、テスト クラスを個人的に認識し、 を使用せずにメソッドを直接呼び出す独自のカスタム JUnit ランナーを作成しましMethod.invoke()
たが、問題は解決しません。 . これは、問題がコア JUnit 内の高い位置にあることを意味します。
それで、他の誰かが同じ問題を抱えていますか?JUnitでのテスト中に予期しない例外が発生した場合にデバッガーがプログラムの実行を中断できるようにするための解決策を知っている人はいますか?
関連する (未回答の) 質問: Eclipse Junit テスト ランナーでキャッチされない実行時例外でサスペンドする
関連する (未回答の) 質問: jUnit テスト ケース内でデバッガーに侵入する方法は?
関連する (部分的に回答された) 質問: Break on Exception in Eclipse using jUnit (受け入れられた回答では、「jUnit で単一のメソッドをデバッグすると、ブレークポイントが機能し始めます。クラスまたはパッケージ全体が jUnit でデバッグされた場合、デバッガーは機能しません。動作しません。」)