Gradle - Jacoco 仅执行单元测试而不抛出设备未找到异常

Swe*_*lla 5 jacoco android-gradle-plugin

我试图仅执行单元测试并生成 jacoco 测试报告,但我总是看到一条失败消息:

Execution failed for task ':App:connectedDebugAndroidTest'.
> com.android.builder.testing.api.DeviceException: No connected devices!
Run Code Online (Sandbox Code Playgroud)

等级代码:

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.8.1"
}

task jacocoTestReport(type: JacocoReport, dependsOn: ['testTpsDebugUnitTest', 'create<build-vairant>DebugCoverageReport']) { 
    group = "reporting"
    description = "Generate unified Jacoco code coverage report"

    reports {
        xml.enabled false
        csv.enabled false
        html.destination  file("${buildDir}/reports/jacocoHtml")
    }

    def fileFilter = [
            '**/*Test*',
            '**/*_MembersInjector.class',
            '**/*_Factory.class']
    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/<build-variant>/debug", excludes: fileFilter)
    def mainSrc = "${project.projectDir}/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: "$buildDir", includes: [
            "jacoco/test<build-variant>DebugUnitTest.exec"
    ])
Run Code Online (Sandbox Code Playgroud)

我用命令执行:

 ./gradlew -Pcoverage clean jacocoTestReport
Run Code Online (Sandbox Code Playgroud)

请帮助解决这个问题,这样它只执行单元测试,而不要求设备!

Sco*_*ggs 0

我在调试 Jacoco 安装时看到了这个问题,幸运的是,这是解决方案的开始。

如果您正在运行单元测试(包括 Jacoco 单元测试),则不需要设备。AndroidTests 需要设备,而不是单元测试。

安装所有 Jacoco 更改到 gradle 并重新同步后:

  1. 打开 Android Studio 的 gradle 窗口(View -> Tool Windows -> Gradle)你会看到一个大象的图标(Android Studio Chipmunk)在此输入图像描述
  2. 单击该图标,将出现一个命令窗口。在此输入图像描述
  3. 在框中输入如图所示:gradle app:createDebugUnitTestCoverageReport并点击 。

这将启动 Jacoco 进程运行。由于它通常依赖于单元测试(假设您的 gradle 配置正确),因此它将强制首先运行单元测试。您将在 gradle 中指定的位置找到报告(默认位置类似于 ./app/build/reports/coverage/test/debug/index.html)。

我的问题是我在第 3 步中输入了错误的单元测试。我输入gradle app:createDebug...并接受了第一个建议。这是错误的!它放置了createDebugAndroidTestUnitCoverageReport,这不是我想要的(并导致请求设备时出错)。