私の組織には、単体テストが混在したプロジェクトがいくつかあります。 それらの半数は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は必要ないようですが、これが例外を見ています。
ArquillianベースのテストはjUnitと同じプロセスで実行されないため、jUnitリスナーはコードカバレッジを取得しません。これらのテストからのカバレッジを計算することができます。私はそれが楽器を信じて、ジャニットに報道してくれると信じています。私は定期的なmockitoテストをしている場合、私はそれらのテストのためのエージェントを実行する必要があります。スローされた例外は問題ではありませんが、ログには迷惑です。 – teacurran
@TerrenceCurranあなたのサンプルの実行中に私はテストを実行するJavaプロセスが1つのみ表示されます – Godin
私はそれを理解したと思います。 Arquillianはリモートまたは組み込みモードで実行できます。それは別のプロセスであるため、リモートモードで実行するときはjacoco拡張子が必要です。私が例外を取得しているプロジェクトは組み込みモードで実行されるため、このモードでは拡張機能はまったく必要ないようです。ご協力いただきありがとうございます。 – teacurran