我有一个带有很多控制器的 grails 3.1.x 项目,我使用 spock 来测试控制器。
我为我的控制器使用命令模式,因此每个操作都需要一个命令对象。
这种控制器的一个例子:
class PlaygroundController {
public Object pg(PgCO pgco) {
String s = null
if (pgco.one) {
s = pgco.one
}
if (pgco.two) {
s = pgco.two
}
render view: 'pg', model: [resultat: s]
}
}
我有一个简单的 spock 测试用例:
void "pg"() {
given:
PgCO pgCO = new PgCO()
pgCO.one = 'TEST'
when:
controller.pg(pgCO)
then:
view == '/playground/pg'
model
model.resultat == 'TEST'
}
该测试运行良好,但是当我运行 jacocoTestReport 时,它显示我的覆盖率远低于 50% ,因为我只覆盖一个分支,所以它没有被完全覆盖很好。
但是该报告包含大量关于我没有源代码的方法的“遗漏指令”。特别是有一个不带任何参数的影子 pg() 方法。Grails 注入了这个方法,但我永远不会从我的测试中调用那个方法,因为我使用的是同一方法的命令对象版本。这种方法还有很多来自 grails 控制器框架的其他方法。
有没有办法告诉 jacoco 它只是需要检查覆盖范围的“源代码”?
我试过指定确切的源目录,但这无济于事
这是覆盖率报告的图像: 覆盖率报告
我每天都有一个简单的项目,只是启用 jacoco 插件,并运行最新的 jacoco :
jacoco {
toolVersion = "0.7.5.201505241946"
}
还有其他人解决这个问题吗?