2016-11-02 29 views
0

私の組織には、単体テストが混在したプロジェクトがいくつかあります。 それらの半数はArquillianを使用し、半分はMockito/CDIUnitを使用します。Arquillian Jacoco Extension + Jacoco Agentが多くの例外を投げる

完全なコードカバレッジを得るためには、Jacoco MavenエージェントとArquillian Jacoco Exceptionを実行する必要があります。

それが正常に動作しますが、我々は両方を実行すると、両方が機器にすべてのクラスを試してみて、Arquillianテストは、例外の数千人がスローされます:私の質問がある

Caused by: java.lang.IllegalStateException: Class com/google/common/collect/RegularImmutableAsList is already instrumented. 
at org.jacoco.agent.rt.internal_6da5971.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:89) 
at org.jacoco.agent.rt.internal_6da5971.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:55) 
at org.jacoco.agent.rt.internal_6da5971.asm.ClassVisitor.visitField(ClassVisitor.java:272) 
at org.jacoco.agent.rt.internal_6da5971.asm.ClassReader.readField(ClassReader.java:768) 
at org.jacoco.agent.rt.internal_6da5971.asm.ClassReader.accept(ClassReader.java:689) 
at org.jacoco.agent.rt.internal_6da5971.asm.ClassReader.accept(ClassReader.java:506) 
at org.jacoco.agent.rt.internal_6da5971.core.instr.Instrumenter.instrument(Instrumenter.java:84) 
at org.jacoco.agent.rt.internal_6da5971.core.instr.Instrumenter.instrument(Instrumenter.java:108) 

、Mavenのリスナーの両方を含むようにどのような方法がありますそしてArquillian Jacoco Exension? Arquillianエクステンションを構成して、クラスを再計測しようとしないようにするか、少なくともスタックトレースを出力しないようにすることはできますか?

私は、誰かがArquillianとMockitoを混ぜないと言うだろうと予想していますが、それが唯一の答えであれば、私のチームはArquillianに投票するつもりです。

あなたがテストの両方のタイプは、ここに含まれて構成された小規模なプロジェクトを参照することができます GitHub - teacurran/alwaysawake-server

をビルド中にスローされたスタックトレースの例を見て、あなたはそれここで見ることができます。 teacurran-alwaysawake-server.master.ci #8 Console

  • update:組み込みモードでコンテナを実行するときにarquillian-jacocoは必要ないようですが、これが例外を見ています。

答えて

0

Arquillian JaCoCo ExtensionはすでにJaCoCoエージェントによって計測されたクラスであるか、またはその逆です。

Arquillian JaCoCo拡張が使用されていると、なぜそれがJaCoCoエージェントによって実行される計測器に計測の代わりの信頼を実行する必要がありますが、あなたはクラスを除外するconfiguration of JaCoCo agentを管理jacoco-maven-plugin goal "prepare-agent"を設定することができため、私は知りません。

私はJaCoCoの開発者として、Arquillian JaCoCo Extensionの詳細についてお聞きしたいと思います。残念ながらページ上に多くの情報がありませんhttps://github.com/arquillian/arquillian-extension-jacoco

+0

ArquillianベースのテストはjUnitと同じプロセスで実行されないため、jUnitリスナーはコードカバレッジを取得しません。これらのテストからのカバレッジを計算することができます。私はそれが楽器を信じて、ジャニットに報道してくれると信じています。私は定期的なmockitoテストをしている場合、私はそれらのテストのためのエージェントを実行する必要があります。スローされた例外は問題ではありませんが、ログには迷惑です。 – teacurran

+0

@TerrenceCurranあなたのサンプルの実行中に私はテストを実行するJavaプロセスが1つのみ表示されます – Godin

+1

私はそれを理解したと思います。 Arquillianはリモートまたは組み込みモードで実行できます。それは別のプロセスであるため、リモートモードで実行するときはjacoco拡張子が必要です。私が例外を取得しているプロジェクトは組み込みモードで実行されるため、このモードでは拡張機能はまったく必要ないようです。ご協力いただきありがとうございます。 – teacurran

関連する問題