Jacoco如何获得测试覆盖率或如何忽略Kotlin数据类

tse*_*tse 6 unit-testing jacoco kotlin test-coverage

Jacoco显示Kotlin数据类的覆盖率为0%。如何配置它以测量覆盖率或完全忽略数据类?

Ber*_*tel 5

如果您已将数据类放在特定包下或特定文件中,则可以将它们从classDirectories. 在下面的示例中,我将数据类放在下面**/model/**

task kotlinJacocoTestReport(type: JacocoReport, dependsOn: 'test') {

    reports {
        html.enabled = true
        html.destination = "${buildDir}/reports/jacoco"
    }

    sourceDirectories = files(["${project.projectDir}/src/main/kotlin"])
    classDirectories = fileTree(dir: "${buildDir}/classes/kotlin/main", excludes: ['**/model/**'])
    executionData = files("${buildDir}/jacoco/test.exec")
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然这回答了问题,但这样做是不公平的。例如我有一个模型类地址。我里面有一个名为“getFullAddress()”的方法,它基本上将所有地址字段相加。但如果我排除这一点,它就不会测试这个逻辑。 (3认同)

Arp*_*ogi 5

我一直在寻找针对相同测试覆盖率问题的解决方案,该解决方案具有针对数据模型类的自动生成的代码,偶然发现以下问题:
Kotlin + JaCoCo:调整编译器以跳过生成的代码

解决方案:将 JaCoCo插件更新为0.8.2,您的问题已解决。

JaCoCo已在0.8.2版本中解决了此问题,请阅读changelog-

  • 在生成报告期间,将滤除带有简单名称为Generated的运行时可见和不可见注释的类和方法(GitHub#731)。
  • 由Kotlin编译器添加的没有行号的方法将在生成报告的过程中过滤掉。Nikolay Krasko(GitHub#689)的想法和实现。


Pau*_*ech 3

这里有一个关于它的悬而未决的问题,因此自动覆盖范围过滤似乎是一项正在进行的工作。

编辑有一个拉取请求(已接受),引入了对生成的 kotlin 代码的过滤。它还没有找到发布的方式。但到目前为止,人们已经在 SNAPSHOT 版本中对其进行了测试,一切似乎都有效。

目前,您最好的选择是使用 SNAPSHOT 版本。