【问题标题】:Jacoco coverage inconsistent on anonymous classesJacoco 覆盖在匿名类上不一致
【发布时间】:2017-01-24 01:40:00
【问题描述】:

我们使用 jacoco,但是在不同的构建和不同的机器上,但是相同的代码和 gradle 脚本,它会给出不同的结果。问题似乎是匿名类——它们有时与测试运行不一致——即使这一切都是作为相同的、干净的、构建的一部分完成的。我们得到这个:

[ant:jacocoReport] Classes in bundle 'SomeThing' do no match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class a/b/c/$Mappings$1 does not match.
[ant:jacocoReport] Execution data for class a/b/c/$Mappings$3 does not match.

所以看起来它使匿名类不同步。知道如何解决这个问题吗?这确实与我们的规则不符,例如我们有 100% 的类覆盖率要求 - 这意味着某些类有时会显示为未覆盖。

【问题讨论】:

    标签: gradle code-coverage jacoco


    【解决方案1】:

    基于文件jacoco.exec生成报告JaCoCo执行字节码分析,即编译类。

    不同版本的 Java 编译器产生不同的字节码。即使重新编译也可能产生不同的字节码 - 请参阅 https://bugs.openjdk.java.net/browse/JDK-8067422https://github.com/jacoco/jacoco/issues/383

    如果在运行时(在创建jacoco.exec 期间)使用的类不同(例如,在具有不同编译器的另一台机器上创建),那么它们不能与在创建报告期间使用的类关联,从而导致消息Execution data for class ... does not match .您可以在JaCoCo documentation 中阅读有关类 ID 的更多信息。

    总而言之,要避免此消息 - 在创建 jacoco.exec 和生成报告期间使用完全相同的类文件。

    【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-10-31
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多