これは私がこれまでに学んだことを報告するための部分的な答えです...
最初に、私はcoberturaがどのように機能するかを見てきました、そしてそれは次のように思われます:
- プロジェクトのJavaクラスは、コード全体でTouchCollector.touch(...)(および同様のメソッド)への呼び出しを含むように修正され、コンパイルされます。(これはインストルメンテーションタスクです。)
- テストはこれらのcoberturaコンパイル済みクラスで実行され、TouchCollectorはテストでプロジェクトクラスのどの行に到達したかを記録します。この情報は、cobertura.serデータファイルに記録されます。
- cobertura / reportタスクは、cobertura.serデータファイルを読み取り、htmlレポートを生成します。
ですから、私の最初の考えは、自動生成されたクラスが適切にインストルメントされていなかったということでした。ただし、これらのcoberturaクラスファイルを逆コンパイルした後、通常のクラスと自動生成されたクラスの両方が正しくインストルメントされていることを確認できます。
また、自動生成されたクラスのテストを含むすべてのテストが実行されていることを確認できます。
次に、私の次の質問は、テストが実行されたときに、自動生成されたクラスが「変更されない」理由です。さらに調査したところ、テストクラスがコンパイルされているとき(つまり、テストコンパイル)、自動生成されたクラスがプロジェクト/ターゲット/テストクラスに追加されていました。自動生成されたクラスのファイルの場所を出力する簡単なテスト(例System.out.println(MyAutoClass.class.getResource("MyAutoClass.class"));
)は、テストがcoberturaによって実行されるときに、以前のcoberturaコンパイル済みクラスではなく、test-classesフォルダー内の自動生成されたクラスを使用することを確認しました計装。
次に、次の質問は、これらのクラスがtest-classesフォルダーに追加されないようにする方法です...?1つのアプローチは、自動生成されたクラスをコンパイルから除外することです。これは、テストクラスを含めることによってのみ実行できます-例:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>x.y.z</version>
<configuration>
<testIncludes>
<testInclude>**/*Test.java</testInclude>
</testIncludes>
</configuration>
</plugin>
または、自動生成されたクラスを除外することも可能である必要があります(これが望ましい)-次のようなものです。
<testExcludes>
<testExclude>**/generated-sources/fmpp/**/*.java</testExclude>
</testExcludes>
ただし、これは機能しませんでした。これを機能させる方法がよくわかりません。
別の方法として、自動生成されたすべてのクラスを1つのパッケージに移動すると、次のようなことが可能になります。
<testExcludes>
<testExclude>com/organisation/project/auto/**/*.java</testExclude>
</testExcludes>
*Test.java
結局、私はファイルを含むだけに行きました