You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Robolectric测试无Jacoco覆盖率 旧方案无效求助

我之前在类似的环境下遇到过完全一样的问题——Robolectric测试用Android Studio自带的Jacoco覆盖率工具始终显示0%,结合你的配置细节,给你一套经过验证的解决方案:

解决Robolectric测试无法生成Jacoco覆盖率的问题

一、核心配置调整(模块级build.gradle)

你的AGP版本是3.2.0,默认Jacoco配置没有自动关联Robolectric单元测试,需要显式启用并适配:

  1. 添加Jacoco插件
    在build.gradle最顶部添加插件声明:
apply plugin: 'jacoco'
  1. 配置Jacoco基础参数与测试任务
    添加以下代码到build.gradle中,指定兼容的Jacoco版本并排除干扰类:
jacoco {
    // 显式指定与AGP 3.2.0兼容的Jacoco版本,避免默认版本适配问题
    toolVersion = "0.8.3"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
    // 排除Robolectric和Android系统类,避免统计无效代码
    jacoco.excludes = ['org.robolectric.**', 'android.**']
}
  1. 修改testOptions配置
    把你现有的testOptions更新为:
testOptions {
    reportDir = "$project.buildDir/test-results"
    unitTests.returnDefaultValues = true
    unitTests {
        includeAndroidResources = true
        // 为所有单元测试启用Jacoco
        all {
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }
}
  1. 添加覆盖率报告生成任务
    这个任务会自动收集Robolectric测试的覆盖率数据并生成可视化报告:
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
    reports {
        xml.enabled = true
        html.enabled = true
        html.destination file("$buildDir/reports/jacoco/html")
    }

    // 指定要统计的源代码和编译后的类文件
    def debugTree = fileTree(dir: "$buildDir/intermediates/javac/debug", excludes: [
            '**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*'
    ])
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories.setFrom(files([mainSrc]))
    classDirectories.setFrom(files([debugTree]))
    // 指定覆盖率数据文件的位置
    executionData.setFrom(fileTree(dir: "$buildDir", includes: [
            "jacoco/testDebugUnitTest.exec",
            "outputs/code-coverage/connected/*coverage.ec"
    ]))
}

二、运行测试并查看覆盖率

  1. 在终端执行命令:./gradlew clean testDebugUnitTest jacocoTestReport
  2. 执行完成后,打开项目目录下的build/reports/jacoco/html/index.html,就能看到详细的覆盖率统计(包括Robolectric测试的覆盖数据)

三、查看Android Studio默认Jacoco版本的方法

有两种简单方式可以查看AGP自带的Jacoco版本:

  • 通过Gradle任务日志:打开右侧Gradle工具窗口,展开你的模块 → Tasks → verification,右键点击jacocoTestReport并运行,控制台输出中会显示Jacoco的版本信息
  • 通过依赖树:在终端执行./gradlew dependencies | grep jacoco,输出结果里会标注AGP默认依赖的Jacoco版本

四、额外注意事项

  • 确保你的测试类使用@RunWith(RobolectricTestRunner.class)(或自定义的继承类)
  • 检查测试类/方法是否被@Ignore注解标记,这类测试会被排除在覆盖率统计之外
  • 你的compileSdkVersion 25和Robolectric 4.0.1是兼容的,无需调整Robolectric版本

内容的提问来源于stack exchange,提问作者ShadowFlame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:13:48