【问题标题】:how to prevent jacoco instrumenting production code?如何防止 jacoco 检测生产代码?
【发布时间】:2018-08-24 02:02:09
【问题描述】:

我使用 jacoco 插件进行 gradle:

apply plugin: 'kotlin'

jacoco {
    toolVersion = "0.7.9"
}
jacocoTestReport {
    reports {
        xml.enabled true
        html.enabled false
        csv.enabled false
    }
}

然后我想为生产构建一个包

./gradlew build jacocoTestReport

问题是:生成的包会被 jacoco 检测吗?如果是,如何构建未检测的包 = 准备好生产?并运行代码覆盖率?我必须运行两次构建吗?是否不可能一次构建代码(签名)然后对其进行测试、测量覆盖率等,如果所有检查都通过,则部署它?

【问题讨论】:

  • 为什么要在生产构建期间运行代码覆盖?
  • 检查它是否是可交付的构建
  • 恕我直言,这通常是通过常规构建作业完成的,而不是发布构建。代码覆盖率是关于质量而不是功能。

标签: java gradle code-coverage jacoco gradle-plugin


【解决方案1】:

JaCoCo 提供了两种执行检测的方式:

不同之处在于,在第一种情况下,检测发生在执行期间的内存中,因此不会更改磁盘上的类或 jar 文件 - 引用 the second link

JaCoCo 的主要优点之一是 Java 代理,它可以即时检测类。这大大简化了代码覆盖率分析,因为不需要预先插桩和类路径调整。

因此,Java 代理带来的简化之一就是您无需担心打包或多次构建。这是 IMO JaCoCo 相对于 Cobertura 和 Clover 等 other coverage tools for Java 的优势之一。

这也是强烈建议使用即时检测的原因之一 - 引用 http://www.jacoco.org/jacoco/trunk/doc/cli.html

使用 JaCoCo 进行代码覆盖分析的首选方法是使用 JaCoCo 代理进行动态检测。离线检测有几个缺点,只有在特定场景明确需要此模式时才应使用。

其中一个特定场景是在 Android 上执行测试,因为无法在其上使用 Java 代理。所以 AFAIK Android Plugin for Gradle,当被指示使用 JaCoCo 测量覆盖率时,使用离线检测,因此需要两种类型的构建 - 有覆盖和没有发布。

另一方面,JaCoCo Gradle Plugin 将 JaCoCo 集成到 Gradle for Java 项目中,AFAIK 提供了仅执行动态检测而不是离线的能力。

【讨论】:

  • “需要两种类型的构建 - 有覆盖和没有发布。” -> 关于如何准确配置的任何链接?
  • @WimDeblauwe 只需点击几下 Android Plugin for Gradle 上的链接,您就可以找到 google.github.io/android-gradle-dsl/current/…“是否为此构建类型启用了测试覆盖率。”
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-25
相关资源
最近更新 更多