JVM との単独戦闘に参加してから何年も経ちましたが、何かを忘れているようです。
大量のアサーションを含むいくつかのコードを取得しましたが、カスタム メッセージはありません。VMに渡されていることassert some_condition;
を確認した単純な古いものであり、起動時にアサーションが有効になっていることをプログラムで再確認しました。-ea
コールチェーンの上昇は、次のようなコードです:
try {
start_the_deeply_nested_stuff();
}
catch (Throwable e) {
do stuff with e.getMessage()
}
AssertionErrorのドキュメントには、Throwable から派生したものであり、(文字列に変換された後) ctor 引数としてアサートされた式で常に構築されると書かれています。ここで getMessage() を呼び出して、 「あなたのコードがうまくいかないため、ファイル X 行 Y でアサーションが失敗しました」などの便利な情報を取得できるはずだと思います。
代わりに、getMessage() は null を返します。アサーションがトリガーされていることを確認できる唯一の方法は、ループしe.getStackTrace()
て行番号を追跡することです。
getMessage はどうなっていますか? AssertionError には、それをトリガーした条件に関する何かが常に含まれているはずではありませんか?