2016-10-26 10 views
0

ArquillianとTestNGを使用して、従来のbig fat EAR(app.ear)アプリケーションをテストしようとしています。テストを実行するには、テスト可能なwarファイル(test.war)を既存のapp.earに追加し、WildFly 10サーバーにリモートでデプロイしました。"IllegalStateException:クラス内の実行データが互換性がありません..."既存の耳のためにJacocoの例外が発生しました。

@Deployment 
public static EnterpriseArchive createDeployment(){ 
    return ShrinkWrap.createFromZipFile(EnterpriseArchive.class, new File("../earapp/target/earapp-0.0.1-SNAPSHOT.ear")) 
      .addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class, "test.war") 
        .addClass(CurrencyConverterTest.class) 
        .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"))); 
} 

私の要件の次の部分は、テストの実行後にコードカバレッジレポートを取得することです。そのために私はJacocoを使用していて、Jacoco Maven Pluginでそれを実行しています。

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.7.201606060606</version> 
    <executions> 
     <execution> 
      <id>default-prepare-agent</id> 
      <goals> 
       <goal>prepare-agent</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>default-report</id> 
      <goals> 
       <goal>report</goal> 
      </goals> 
     </execution> 
</plugin> 

ここで、app.earがデプロイされるとさえテストはうまく実行されているが、それはJacocoが「はIllegalStateExceptionで、例外失敗しているレポートを生成するために来るとき:Jacocoでクラスの互換性のない実行データを...... ... "

例外はテストケースを含むクラスにのみ適用されます。 Jacoco Maven Pluginで除外タグを使用してそのクラス(CurrencyConverterTest.class)を除外した場合、例外はなくなりますが、Jacocoによって生成されたレポートにはデータは含まれません。また、私はjacoco.execをチェックして、それが有効なデータを含んでいると言えます。

私は独自のコードを共有できませんので、githubで3つの簡単なプロジェクトを作成してエミュレートしています。

  • プロジェクト1(currencycoverter):このプロジェクトには、3つのメソッドを持つリモートインタフェースを持つ1つのステートレスejbがあります。
  • プロジェクト2(earapp):このプロジェクトは、プロジェクト1をejbモジュールとして使用してearファイルを作成します。
  • プロジェクト3(eartest):このプロジェクトのテスト私にはプロジェクト2.

によって生成された耳が、それはそこにいくつかのバグがJacocoコードであるが、私はまた、間違っているかもしれないもののように見えます。私を助けてください。

更新:Gitのリポジトリ上の共有プロジェクトをビルドする手順

ステップ1:すべての3つのプロジェクトをチェックアウトし、EclipseプロジェクトとしてEclipseにインポートします。

ステップ2:実行のMavenコマンドプロジェクト1(currencyconverter)用クリーンinstll

ステップ3:実行のmavenコマンドきれいなパッケージプロジェクト2(earapp)について。これにより、ターゲットディレクトリにearファイルが作成されます。

手順4:ローカルマシンでスタンドアロンモードでWildFly 10を起動します。

手順5:mavenコマンドを実行して、プロジェクト3(eartest)の場合はをクリーンインストールします。これにより、手順3で生成された耳が使用され、WildFly 10アプリケーションサーバーに展開され、テストが実行されます。

+0

Stackoverflowでは質問に2つ以上のリンクを追加できないため、プロジェクト1へのリンクはhttps://github.com/keeshaaw/currencyconverter –

答えて

1

残念ながら、あなたの例を構築することができません:それは、単一のGitHubリポジトリに配置されることになる場合

[ERROR] Failed to execute goal on project eartest: 
Could not resolve dependencies for project com.sg.eartest:eartest:jar:0.0.1-SNAPSHOT: 
Could not find artifact org.jboss.osgi.metadata:jbosgi-metadata:jar:3.0.1.Final in central (https://repo.maven.apache.org/maven2) 

また、それで遊ぶために単純になります。しかし

あなたがテスト中のすべてのモジュールにJaCoCoの正確な同じバージョンを使用していることを確認してください。

テスト中のJVMが正常に終了していることを確認してください。破損した "jacoco.exec"ファイルが破損している可能性があります。デフォルトではJVMシャットダウン時に保存されるためです。 JaCoCoの以前のバージョンでは、このような破損したファイルは

切り捨てられたファイルの場合は、エラーメッセージがJaCoCoバージョンで改善されました0.7.7(https://github.com/jacoco/jacoco/issues/95#issuecomment-17271597あたりなど)

IllegalStateException: Incompatible execution data for class... 

引き起こす可能性があります - https://github.com/jacoco/jacoco/pull/397をそして、それは良いですhttp://www.eclemma.org/jacoco/trunk/doc/changes.html

最後に、あなたのテストは、テスト中のメインコードとは別のモジュールに完全に位置しているようです。 "report" mojoは、現在のモジュールのクラスのレポートを作成します。モジュール全体のカバレッジを集計するには、「レポート集計」を使用してください。http://www.eclemma.org/jacoco/trunk/doc/report-aggregate-mojo.htmlの例があります。https://groups.google.com/forum/#!msg/jacoco/8zjkSseaxD4/QOux-Ws-AgAJ

+0

こんにちはGodin、私はすでに同じ構造を持つ既存のプロジェクトを持っているので、同じものをエミュレートしようとしたため、テストはアプリケーションソースを含むプロジェクトとは異なるプロジェクトにあります。私はeartestプロジェクトのpomをきれいにし、gitリポジトリのeclipseの.projectと.classpathファイルもチェックしました。これで手順(更新された質問)に従えば、プロジェクトをビルドしてテストできるはずです。 –

+0

@KeshawKumar私はそれをテストするつもりはありません - 私の答えの最後の部分を参照してください:テストが別のモジュールに配置されている場合、 "レポート"の代わりに "レポート集計"を使用します。 – Godin

+0

はい、あなたの答えの最後の部分から、私が間違っているところはかなり明確です。すべての助けに感謝します。ほんとうにありがとう。 :-) –

-1

私はこの問題をJacocoユーザーグループに聞いて、Jacocoのバージョンを最新のものに更新するように頼んだ。

私はJacoco 0.7.4.201502262128を使用していましたが、その例外が発生しました。今私はJacoco 0.7.7.201606060606に移動し、問題は解決されました。また、Jacocoユーザーグループは、JacocoコアJacocoエージェントとJacoco mavenプラグインの同じバージョンを使用して、将来の問題を回避するよう依頼しています。

+0

申し訳ありませんが、https://groups.google.com/d/msg/jacoco/Y7x6e0ECLI0/GVktU1kXAQAJには、以前のバグがありますバージョン。 – Godin

+0

@ゴダン申し訳ありませんが、私は、なぜJacocoを現在のバージョンにアップグレードしただけで例外がなくなったのか説明する他の方法がないので、前提を作りました。私はバグがあると答えた部分を削除しました。あなたの側からの確認なしに再び仮定のために申し訳ありません。 –

関連する問題