2013-04-03 12 views
6

私のpom.xmlにこのプラグインコードがあります。このプラグインを削除すると、Mavenは単体テストを2回実行しません。このプラグインのどの部分がユニットテストを2回実行するのかを知りたかっただけです。Mavenはクローバープラグインでユニットテストを2回実行します

<plugin> 
    <groupId>com.atlassian.maven.plugins</groupId> 
    <artifactId>maven-clover2-plugin</artifactId> 
    <version>3.0.4</version> 
    <configuration> 
     <licenseLocation>/location/to/clover.license</licenseLocation> 
     <generateXml>true</generateXml> 
     <generateHtml>true</generateHtml> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>instrument</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>main</id> 
      <phase>verify</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
       <goal>clover</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>site</id> 
      <phase>pre-site</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

答えて

7

クローバープラグインフォークインストルメントクラスパスを使用してtest相へのライフサイクルアップ。テストを実行します

あなたの標準的なライフサイクル

その後クローバーが一緒に来て、にそれらを要求する(通常はその段階でテストを起動する複数の実行または他のテストプラグインをtest段階で確実な使用して、しかしがあるかもしれません)もう一度実行してください。

今私の標準警告のために:

  • コードカバレッジは、JVM仕様の下で法的な方法で実行されたバイトコードを変更します。
  • このような変換によって、カバレッジマップを更新する際に同期ポイントが追加される可能性があります。
  • このような追加の同期ポイントは、JVMが実行できる操作の並べ替えを制限する可能性があります。
  • スレッド関連ではなく、説明するのがむしろ複雑な変更があります。

あなただけの今までカバレッジを使用してテストケースを実行する場合はオンになって、あなたは報道として、100%の合格率を信頼することはできませんあなたが報道して実行されない場合は、逆にバグ

をマスクすることができ、中に任意の変更をオンにJVMアーキテクチャは、あなたが知らなかった新しいバグを強調することができます。テストで、カバレッジなしに渡し

  • はオン=>おそらくOK

  • テストカバレッジをオンにして、ここでバグ、用心テストカバレッジを渡し

  • が変わっ> =オフのとき、失敗渡しますオフのときに失敗する>テストがタイミング重大ではなく、ここでバグしてもテストが運用環境で実行される場合、-serverはホットパスを完全に最適化するときにのみ表示されることがあります。

  • T ESTはバグ>で、カバレッジなしでは=オンに失敗し

「シュテファン黄金律:Just run the damn tests twice

+0

これはクローバー特有のものですか?または、すべての計測ツールでこれを行う必要がありますか? – Yamcha

+0

クローバーには関係ありません。私のアドバイスは、テストを2回実行することですが、人々はこのアドバイスを無視することができます。 JavaCoCoはおそらく一度だけテストを実行するために設定するのが最も簡単です...言及したすべてのリスク –

0

clover2:あなたはそれが並列ビルドのライフサイクルをフォークような方法で作品を使用している楽器の目標。これによりビルド時に生成されるすべての成果物(クラス、jarsなど)は/ target/cloverディレクトリに置かれるか、-clover.jarという接尾辞が付けられます。これにより、あなたの「通常の」コード(計装されていないコード)と計装されたコードとの間の分離が保証されます。

このような分離が必要ない場合(たとえば、 "mvn test"を実行し、 "mvn deploy"ではなく)、clover2:instrumentの代わりにclover2:setupを使用することをお勧めします。

http://docs.atlassian.com/maven-clover2-plugin/latest/setup-mojo.html

関連する問題