【问题标题】:Arquillian Jacoco Extension + Jacoco Agent throws lots of exceptionsArquillian Jacoco Extension + Jacoco Agent 抛出很多异常
【发布时间】:2016-11-04 23:22:14
【问题描述】:

我的组织中有几个项目混合了单元测试。 其中一半使用 Arquillian,一半使用 Mockito/CDIUnit。

为了获得完整的代码覆盖率,我们必须运行 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

  • 更新:在嵌入式模式下运行容器时似乎不需要 arquillian-jacoco,这是我看到异常的地方。

【问题讨论】:

    标签: junit jacoco jboss-arquillian


    【解决方案1】:

    似乎 Arquillian JaCoCo Extension 检测了已由 JaCoCo 代理检测的类,反之亦然。

    我不知道 Arquillian JaCoCo Extension 用于什么以及为什么它需要执行检测而不是依赖 JaCoCo 代理执行的检测,但您可以配置管理 configuration of JaCoCo agentjacoco-maven-plugin goal "prepare-agent" 以排除类。

    顺便说一句,作为 JaCoCo 开发人员,我有兴趣了解有关 Arquillian JaCoCo 扩展的更多信息。不幸的是,https://github.com/arquillian/arquillian-extension-jacoco页面上没有太多信息

    【讨论】:

    • 基于 Arquillian 的测试不会在与 jUnit 相同的进程中运行,因此 jUnit 侦听器不会获取代码覆盖率。该扩展允许计算这些测试的覆盖率。我相信它会检测并报告覆盖范围给junit。在我有定期模拟测试的情况下,我必须为这些测试运行代理。抛出的异常不是问题,但在日志中看到很烦人。
    • @TerrenceCurran 在执行您的示例期间我只看到一个执行测试的 Java 进程
    • 我想我明白了。 Arquillian 可以在远程或嵌入式模式下运行。当它以远程模式运行时,我需要 jacoco 扩展,因为它是一个不同的进程。我遇到异常的项目是在嵌入式模式下运行的,所以在这种模式下我似乎根本不需要扩展。感谢您的帮助。
    猜你喜欢
    • 2017-06-16
    • 2012-09-03
    • 2017-06-05
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多