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

TeamCity上的Android无法读取Jacoco数据文件,android,gradle,teamcity,android-gradle-plugin,Android,Gradle,Teamcity,Android Gradle Plugin,今天我正在学习TeamCity Integration Server,我正在尝试使用基于Android Gradle的应用程序启用Jococo报表 文档向我展示了如何启用Jococo覆盖范围,并给出了以下警告: 确保测试在fork=true模式下运行。否则,可能无法正确收集覆盖率数据。 我不知道该怎么做才能“在fork=true模式下运行测试”。TeamCity未生成覆盖率报告,并用以下日志警告我: Jacoco数据文件路径指定为C:\TeamCity\buildAgent\temp\build

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

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

确保测试在fork=true模式下运行。否则,可能无法正确收集覆盖率数据。

我不知道该怎么做才能“在fork=true模式下运行测试”。TeamCity未生成覆盖率报告,并用以下日志警告我:

Jacoco数据文件路径指定为C:\TeamCity\buildAgent\temp\buildTmp\JACOCO5884661263301729570coverage\Jacoco.exec,但不可读。保险费将不予收取

我认为此警告与未在fork=true模式下运行测试有关

所以,我的问题是:

  • fork=true模式意味着什么,以及
  • 如何在gradle启用它

  • 谢谢

    >你可能想考虑使用Gradle。这还有一个额外的好处,即消除对CI基础设施的任何依赖,允许您运行开发人员机器的覆盖率报告。

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

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

    ##teamcity[JacoReport dataPath='']

    因此,我修改了build.gradle文件,将以下行添加到
    jacotestreport
    部分:

    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*.*\']'
    }
    
    之后,Complete
    JacoTestReport
    是:

    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
        }
    
    }
    
    Teamcity开始报告CodeCoverage,如下所示:


    实际上,我已经在Gradle上使用了jacoco插件,并且我能够在开发者的机器上运行覆盖率测试。但是,我希望在CI服务器上运行,以便在“测试代码”数量减少时能够拒绝生成。感谢您指出。这不考虑ConnectedAndroids测试结果。你知道如何把它们包括在报告中吗?