5

我有一个带有很多控制器的 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"
}

还有其他人解决这个问题吗?

4

0 回答 0