在TeamCity上,Android无法读取Jacoco数据文件

reg*_*sxp 5 teamcity android gradle android-gradle-plugin

我今天正在学习TeamCity Integration Server,我正在尝试使用基于Android Gradle的应用程序启用Jococo Reports.

文档向我展示了如何启用Jococo覆盖,并显示以下警告:

确保您的测试以fork = true模式运行.否则,可能无法正确收集覆盖数据.

我不知道该怎么做才能"在fork = true模式下运行我的测试".TeamCity没有生成覆盖率报告,并通过以下日志警告我:

Jacoco数据文件路径指定为C:\ TeamCity\buildAgent\temp\buildTmp\JACOCO5884661263301729570coverage\jacoco.exec但不可读.不会收集保险范围.

我认为这个警告与不在fork = true模式下运行测试有关.

所以,我的问题是:

  1. 什么fork = true模式意味着和
  2. 如何在gradle上启用它

谢谢!!!

reg*_*sxp 7

经过一些研究,我能够指示Teamcity使用"服务消息"技术处理jacoco生成的覆盖报告,解释如下:

从TeamCity 9.0开始,TeamCity能够解析JaCoCo覆盖数据并使用以下格式的服务消息生成报告:

##teamcity[jacocoReport dataPath='<path to jacoco.exec file>']

所以,我修改了我的build.gradle文件,将以下行添加到jacocoTestReportsection:

if (project.hasProperty("teamcity")) {
    println '##teamcity[jacocoReport dataPath=\'app/build/jacoco/testDebug.exec\' includes=\'com.mynamespace.myproject.*\' excludes=\'**/R.class **/R$*.class **/*$ViewInjector*.* **/BuildConfig.* **/Manifest*.*\']'
}
Run Code Online (Sandbox Code Playgroud)

之后,完成了jacocoTestReport:

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
    group = "Reporting"

    description = "Generate Jacoco coverage reports"

    classDirectories = fileTree(
            dir: '../app/build/intermediates/classes/debug',
            excludes: ['**/R.class',
                       '**/R$*.class',
                       '**/*$ViewInjector*.*',
                       '**/BuildConfig.*',
                       '**/Manifest*.*']
    )

    additionalSourceDirs = files(coverageSourceDirs)
    sourceDirectories = files(coverageSourceDirs)

    executionData = files('../app/build/jacoco/testDebug.exec')
    if (project.hasProperty("teamcity")) {
        println '##teamcity[jacocoReport dataPath=\'app/build/jacoco/testDebug.exec\' includes=\'com.mynamespace.myproject.*\' excludes=\'**/R.class **/R$*.class **/*$ViewInjector*.* **/BuildConfig.* **/Manifest*.*\']'
    }

    reports {
        xml.enabled = true
        html.enabled = true
    }

}
Run Code Online (Sandbox Code Playgroud)

Teamcity开始报告CodeCoverage如下:

在此输入图像描述