android jacoco 覆盖率显示 0% gradle 但是有 95% 的测试覆盖了代码

android jacoco coverage shows 0% with gradle however there are 95% tests covering code

我正在尝试让 jacoco 为我的 android 测试项目创建代码覆盖率报告。

Gradle版本classpath 'com.android.tools.build:gradle:2.0.0'

我在 build.gradle 中有以下内容:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.1.201405082137"
}

android {
    buildTypes {
        release {
        }
        debug {
            testCoverageEnabled true
        }
    }
}

报告显示如下图

几乎有 95% 的代码覆盖率(当我 运行 2015 年的同一份报告显示报告为 95%)。从那时起,代码和测试文件夹没有太大变化。所以理想情况下它应该像这样显示覆盖范围

我尝试 运行 使用 JDK7 和 8 进行报告,但结果相同。也试过换成最新版本的 JaCoCo,结果还是一样。

知道为什么报告显示为 0% 的覆盖率吗?尽管 运行 Gradle 任务成功运行了 androidTest 文件夹中的测试。

Facing same issue as mentioned in this question - This question is unanswered yet

使用命令

your project 生成覆盖
./gradlew clean createDebugCoverageReport

工作正常:

我唯一改变的是 compileSdkVersion2325buildToolsVersion23.0.125.0.2,因为这是我的版本。

我遇到了完全相同的问题。但是使用 Guna(2017 年 2 月 27 日)的评论,问题似乎是由 运行 在某些三星设备上进行覆盖测试引起的。

  • 一些较新的三星设备 上,当您 运行 Jacoco gradle 任务 createDebugCoverageReportcreateDebugAndroidTestCoverageReport,它将 运行 单元测试,但显示 0% 覆盖率

  • 但是在 Google Nexus 5 或大多数模拟器 上,当您 运行 相同的 Jacoco 任务时,它将 工作正常 并显示正确的覆盖范围。较旧的三星设备也运行良好。

很奇怪。

另外记得确保所有测试都先通过。这是 Jacoco 的另一个限制,因为即使你的整个套件中有一个小测试失败,它也不会生成测试覆盖率报告。另请注意:您的应用可能 。原因不明 - 您只需重新安装即可。

更新,2018 年 10 月 11 日: 即使单个测试失败,也有一种方法可以生成覆盖率报告。在你的app/build.gradle(来自here)中使用这个:

buildTypes {
    debug {
        testCoverageEnabled = true
    }
}

project.gradle.taskGraph.whenReady {
    connectedDebugAndroidTest {
        ignoreFailures = true
    }
}

自动构建脚本可能需要使用"--continue"标志,以确保单元测试失败将继续gradle任务;像这样:

./gradlew createDebugCoverageReport --continue

更多信息,另请参阅: