テストコードを書いて確認。EclipseのプラグインであるEclEMMAは内部でJaCoCoを使っています。
とりあえずオールグリーンです。
カバレッジが100%ではないですが、ここでは問題にしません。#ほんとはこれを調べてたんですが。
ちゃんとテストコードのカバレッジもとれてます。
次にMaven Pluginです。使ったバージョンは、0.6.3-SNAPSHOT。
HTML、XML、CSVでレポートが出力されます。HTMLのレポートを開いたものです。テストコードのカバレッジが無いです。
調べていくと、prepare-agentゴールでデータを作って、reportゴールでレポート化しています。
prepare-agentゴールでは、JavaAgentを使ってデータを取っています。この辺はたぶんEclEMMAも一緒のはず。
実際、HTMLレポートのSessionsのリンクをたどると、実行時のデータがすべて出てます。
ここを見るとちゃんとテストコードも通ってます。ということは、データは取れているけどレポートできてない、EclEMMAで出てるという事は、Maven Pluginで出ていないですね。
で、いろいろとpomをいじってみましたが駄目だったのでソースをみることに。
https://github.com/two-pack/jacoco/blob/master/jacoco-maven-plugin/src/org/jacoco/maven/BundleCreator.java
public IBundleCoverage createBundle( final ExecutionDataStore executionDataStore) throws IOException { final CoverageBuilder builder = new CoverageBuilder(); final Analyzer analyzer = new Analyzer(executionDataStore, builder); final File classesDir = new File(this.project.getBuild() .getOutputDirectory()); @SuppressWarnings("unchecked") final List<File> filesToAnalyze = FileUtils.getFiles(classesDir, fileFilter.getIncludes(), fileFilter.getExcludes()); for (final File file : filesToAnalyze) { analyzer.analyzeAll(file); } return builder.getBundle(this.project.getName()); }
classesDirがgetOutputDirectory()になってます。target/classesだけみたい。。。
ということは、target/test-classesも入れれば良いってことかな?
@SuppressWarnings("unchecked") public IBundleCoverage createBundle( final ExecutionDataStore executionDataStore) throws IOException { final CoverageBuilder builder = new CoverageBuilder(); final Analyzer analyzer = new Analyzer(executionDataStore, builder); final File classesDir = new File(this.project.getBuild() .getOutputDirectory()); final File testClassesDir = new File(this.project.getBuild() .getTestOutputDirectory()); final ListfilesToAnalyze = FileUtils.getFiles(classesDir, fileFilter.getIncludes(), fileFilter.getExcludes()); filesToAnalyze.addAll(FileUtils.getFiles(testClassesDir, fileFilter.getIncludes(), fileFilter.getExcludes())); for (final File file : filesToAnalyze) { analyzer.analyzeAll(file); } return builder.getBundle(this.project.getName()); }
ということでビルドして入れてレポート出した見た結果がこちら。ちゃんと出ました。
テストコードのカバレッジってデフォルトで出た方が、テストが思いがけず通ってない場合が見れていいと思うんですが、どうですかね?
フラグとテスト作ってリクエストしてみようかな。
0 件のコメント:
コメントを投稿