现在如果我们不想让测试覆盖率如此低的代码进入到生产环境中,我们能做些什么呢?JacocoCoverageVerification 这个 task 能够帮我们解决这个问题!

  这个 task 依赖于前面的 customJacocoTestReport task,如果执行它,将会首先生成测试覆盖报告然后接着对其进行分析。这个 task 的配置中包含如何找到源代码类所在的路径,以及 violationRules 配置块。violationRules 配置块本身又包含了一些规则块,只要你愿意,你可以添加尽可能多的这种规则块。在这个例子中,我配置了三个规则块:
  规则一
  如果没有被单元测试覆盖到的指令比率高于 60%,那么构建将会失败:

  规则二
  如果代码分支(if,switches 等)有多达 80% 以上没有被单元测试覆盖到,那么构建将会失败:

  规则三
  在这个规则中我声明了在 presenter 包中的每个类都必须至少有一个单元测试。请注意所有匿名类都会被当作一个个独立的类来对待。

  想要了解更多关于规则的语法,可查看:http://www.jacoco.org/jacoco/trunk/doc/ant.html。(译者注:关于在 gradle 中配置 JaCoCo,可以参见:https://docs.gradle.org/current/userguide/jacoco_plugin.html
  此时我们执行命令:

  将会得到如下所示的由于违反规则所导致的错误:

  从上面可以看到,示例工程的覆盖率不符合我们规则,因此需要编写更多的单元测试!
  在这个示例工程仓库的 VerificationPassed 分支,你可以看到覆盖率满足规则的代码。通过这种方式,你可以配置构建脚本,并将测试覆盖率验证添加到构建过程中。
  JaCoCo 是一个功能强大的工具,可以帮助你增加代码仓库的测试覆盖率。当然,如何定义规则和代码覆盖率取决于你的和具体项目的需求,但这是一个很好的代码仓库的健康指标,值得尝试将其引入你的构建管道中。在我们的项目中,测试覆盖率从开始的 0.4 慢慢增加到 0.6,并且还在继续增长。