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

Robolectric集成JaCoCo运行单元测试报错且无法生成覆盖率报告

问题排查解决方法

错误根因

报错是Guava版本冲突导致的,错误日志中的NoSuchMethodError指向Guava的ImmutableList.sortedCopyOf方法,原因是Robolectric 4.3.1依赖高版本Guava,和项目中其他依赖(旧版JaCoCo、Android构建工具自带依赖)引入的低版本Guava发生了冲突,类加载时优先加载了没有对应方法的低版本Guava,触发了初始化失败。

解决步骤

  • 第一步:强制指定测试环境的Guava版本
    在app模块build.gradle的依赖中添加高版本兼容Guava,强制覆盖冲突的低版本:
dependencies {
    // 原有依赖保留,新增下面配置
    testImplementation ('com.google.guava:guava:27.1-android') {
        force = true
    }
}
  • 第二步:升级JaCoCo版本
    你当前配置中注释了JaCoCo版本,使用的默认旧版本和Robolectric兼容性差,打开jacoco.gradle中注释的jacoco配置块,修改为稳定兼容的版本:
jacoco {
    toolVersion = "0.8.8"
}
  • 第三步:修正class文件查找路径(适配AGP 3.6及以上版本)
    Android Gradle Plugin 3.6之后,编译后的class文件存储路径从intermediates/classes/变更为intermediates/javac/,你原有配置的路径错误,会导致后续覆盖率报告无法正常生成,将jacoco.gradle中的classDirectories配置修改为:
classDirectories.from = fileTree(
        dir: "${project.buildDir}/intermediates/javac/${name}",
        excludes: ['**/R.class',
                   '**/R$*.class',
                   '**/*$ViewInjector*.*',
                   '**/*$ViewBinder*.*',
                   '**/BuildConfig.*',
                   '**/Manifest*.*']
)
  • 第四步:验证生效
    修改完成后执行./gradlew clean清理项目缓存,再执行覆盖率任务即可,比如debug版本的覆盖率任务为./gradlew testDebugUnitTestCoverage,测试可正常运行且覆盖率报告生成在build/reports/jacoco/目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03