Maven プロジェクトのビルド中に実行される「カスタム コード」があります。cobertura のライン カバレッジ機能を使用して、ビルド用の「カスタム コード」の実行された行のレポートを生成したいと考えています。
これまでに達成したこと:
- レポートを生成するために maven cobertura プラグインを使用しています。
- 「カスタム コード」の実行は、maven ビルドのテスト フェーズにバインドされます。
- Maven ゴール cobertura:cobertura は最初に cobertura:instrumentation を実行し、次にテスト フェーズで「カスタム コード」が実行されます。
予期しない動作:
cobertura レポートには回線カバレッジが表示されると思っていましたが、回線カバレッジ レポートには 0 しか表示されません。
この問題をさらに調査したところ、cobertura:instrumentation が別の vm で行われていることがわかりました。「ps」コマンドでリストされたプロセスのスナップショットをたどります。
6647 ? S 0:00 /bin/sh -c /home/user/softwares/JDK/jdk1.7.0_79/jre/bin/java -Dlog4j.configuration=file:/tmp/log4j628942363594701372config.properties -Xmx64m net.sourceforge.cobertura.instrument.InstrumentMain --commandsfile /tmp/cobertura.5724213382380101768.cmdline
6649 ? D 0:00 /bin/sh -c /home/user/softwares/JDK/jdk1.7.0_79/jre/bin/java -Dlog4j.configuration=file:/tmp/log4j628942363594701372config.properties -Xmx64m net.sourceforge.cobertura.instrument.InstrumentMain --commandsfile /tmp/cobertura.5724213382380101768.cmdline
これを解決しようとします:
- これを解決するために、jmockit が同じことを達成する方法を見つけようとしました。まだそれを理解することができていません。
また、実行コードを既に実行中の VM にアタッチしようとしました。
com.sun.tools.attach.VirtualMachine.attach(arg0);
誰かここで私を助けてくれませんか。
更新 - 2015 年 10 月 23 日
Cobertura Github Wikiからの抜粋によると、
java -cp C:\cobertura\lib\cobertura.jar;C:\MyProject\build\instrumented;C:\MyProject\build\classes;C:\MyProject\build\test-classes -Dnet.sourceforge.cobertura.datafile =C:\MyProject\build\cobertura.ser ASimpleTestCase
これにより、cobertura のインストルメント化されたコードでテストが実行されます。追加の -javaagent:agent.jar でこれを試しました。これもうまくいかないようです。