如何防止jacoco检测生产代码?

时间:2018-03-15 10:01:05

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

我使用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检测吗?如果是的话,如何构建未装备的包装=准备生产?和代码覆盖率运行?我必须运行构建两次吗?是不可能一次构建代码(签名)然后测试它,测量覆盖率等,如果所有检查都通过,部署它?

1 个答案:

答案 0 :(得分:3)

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

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

  

JaCoCo的主要好处之一是Java代理,它可以即时监控类。这样可以简化代码覆盖率分析,因为不需要预先检测和类路径调整。

因此Java代理带来的简化之一就是您不必担心打包或多个构建。这是IMO JaCoCo优于other coverage tools for Java的优势之一,如Cobertura和Clover。

这也是强烈建议使用即时仪器的原因之一 - 引用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截至今天提供了仅执行即时检测而非脱机的功能。