Coberturaは、コードがカバーされたことを認めることを拒否します
-
10-07-2019 - |
質問
コードカバレッジに関するレポートを作成するためにMaven(2)Coberturaプラグインを使用していますが、メソッドで次のスタブを使用しています:
try {
System.exit(0);
} catch (final SecurityException exception) {
exception.printStackTrace();
}
System.err.println("The program never exited!");
例外などをログに記録する必要があることはわかっていますが、それは現時点では重要ではありません... Coberturaは、スタックトレースが印刷された後の行がカバーされていることを認めることを拒否しています。つまり、 System.err.println
ステートメントの前に「}」がある行は、カバーされているように表示されていません。以前は、メソッドの終了中括弧がカバーされているように表示されていなかったため、 System.err
ステートメントがありました。 System.err.println
ステートメントがカバーされているので、終了ブレースがカバーされている必要があるというcoberturaのmavenプラグインをどのように納得させることができますか?
ああ、そしてモックセキュリティマネージャーを使用してセキュリティ例外をスローします。これは、 System.exit
呼び出しの後にテストを実行し続ける最も簡単な方法だからです。
解決
私はしばらく(2005年?)Coberturaを使用していませんでした。同様の問題が、C#のNCoverおよびcatch / finallyブロックに続く中括弧に存在します。
私の提案は、このCoberturaバグレポートに追加することです。同様の問題の詳細。また、@ tvanfossonのアドバイスに従ってください。実際にはJVMで何にもならない中かっこをカバーしていないことは、「ノイズ」として無視できるものです。
他のヒント
カバレッジレポートを確認します。テストを再確認してください。コードが実際にカバーされており、100%ヒットする心配はないことに注意してください。コードカバレッジは、テストでヒットするのを怠っていた可能性のある領域を見つけるために使用するのが最適ですが、目標として100%のカバレッジを取得することに焦点を当てるだけで、ツールが100%。できることはツールを使用しますが、ツールが何をするかを定義させるというtrapに陥らないでください。
Javaクラスファイル形式では、すべてのメソッドにコードオフセットを行番号にマッピングするテーブルで注釈が付けられます。この場合、閉じ括弧はバイトコードを生成しないため、カバーされません。これは、ソースとバイトコード間の不完全な対応の問題です。この行を非コードとして認識して、カバレッジツールで処理する必要があります。
Emma にも同様の問題があることを知っています。 Clover 運賃ははるかに優れていますが、商業的です(この場合も処理できるかどうかはわかりません) 。 IDEAを使用する場合は、新しいカバレッジの実装を試してください。 -それは非常に良く、活発に開発されています。
これは古い質問であり、Coberturaがすでにこれを修正していることは知っていますが、完全を期すため、"}"内部的に自動的に「最終的に」発生したためです。ブロック。
次のようにコードを参照してください:
try {
System.exit(0);
} catch (final SecurityException exception) {
exception.printStackTrace();
} finally {
// noop
}
幸いなことに、これは一部のバージョンでは発生していません。