我的组织中有几个项目混合了单元测试。 其中一半使用Arquillian,一半使用Mockito / CDIUnit。
为了获得完整的代码覆盖率,我们必须运行Jacoco Maven Agent和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
答案 0 :(得分:0)
似乎Arquillian JaCoCo Extension仪器已经由JaCoCo代理检测过,或者反之亦然。
我不知道Arquillian JaCoCo Extension的用途以及为什么需要执行检测而不依赖JaCoCo代理执行的检测,但您可以配置管理jacoco-maven-plugin goal "prepare-agent"的configuration of JaCoCo agent排除班级。
作为JaCoCo的开发人员,我有兴趣了解有关Arquillian JaCoCo Extension的更多信息。不幸的是,页面https://github.com/arquillian/arquillian-extension-jacoco 上的信息不多