安卓如何对本地单元测试进行覆盖率测试

7
我一直在尝试获取本地单元测试的代码覆盖率,但一直未能成功。
以下是本地单元测试的参考资料。

https://developer.android.com/training/testing/unit-testing/local-unit-tests.html

运行单元测试时,我使用以下gradle命令:
./gradlew clean testDebugUnitTest
此任务将运行单元测试,但当我在“build/jacoco”文件夹中查看生成的jacoco文件(testDebugUnitTest.ec)时,它总是显示一个空覆盖率。
我已在我的build.gradle文件中启用了覆盖率,如下所示。
android {
    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }
}

但似乎这并没有起到帮助的作用。我是否漏掉了什么?

请注意,如果我通过Android Studio运行本地单元测试,一切都正常。我点击我的“tests”模块,然后点击“使用覆盖率运行测试”。


尝试使用testCoverageEnabled=true并运行createDebugCoverageReport任务。 - CommonsWare
谢谢您的建议。我已经尝试了两种方法(见上文),但仍然没有成功:( 当我运行“createDebugCoverageReport”任务时,它只会为我的Android测试(位于androidTest目录中)添加覆盖率,而不是本地单元测试。 - Jon
抱歉,我没有注意到,我在想仪器测试而不是本地单元测试。 - CommonsWare
2个回答

4

我找到了自己问题的答案。奇怪的是,使用设置“testCoverageEnabled”标志运行“testDebugUnitTest”似乎是正确的方法。

然而,由于显然Gradle的Jacoco版本不同于在Android Studio和我的CI系统(Jenkins)中运行的Jacoco版本,由于Jacoco中的一些向后兼容性问题,无法查看代码覆盖率报告。

为了解决这个问题,我将Gradle中的Jacoco版本设为与我的Android Studio(Intellij)和Jenkins中相同的版本。

jacoco {
    toolVersion = '0.7.0.201403182114'
}

我把上面的代码放在了我的 build.gradle 文件中。


谢谢,我在这里疯狂地尝试弄清楚为什么我的代码报告总是空的。 - scott dickerson
这对我不起作用,只显示了经过仪器化测试的覆盖率,而不是单元测试的覆盖率。 - Jackie

0

我不得不自己解决这个问题,实际上我本来期望默认的Gradle插件会支持本地单元测试的代码覆盖率。然而,很遗憾,即使在Android Gradle插件版本3.0.1中,它也没有提供支持。

幸运的是,我们可以使用一个简单的第三方插件来生成Jacoco测试报告:gradle-android-junit-jacoco-plugin

要使用它,你需要将这个插件的仓库和类路径注册到你的根级build.gradle文件中。你的build.gradle文件可能会有所不同,但以下是对我有效的配置:

buildscript {
    repositories {

        // ... there may be other repositories here

        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    dependencies {
        // ... other classpaths here too

        classpath "gradle.plugin.com.vanniktech:gradle-android-junit-jacoco-plugin:0.11.0"

    }
}

为了生成报告,可以简单地执行以下操作:

./gradlew jacocoTestReportDebug

输出结果将存储在你的模块构建文件夹中,例如:

your-module/build/reports/coverage/debug/index.html

请注意,我已验证此方法适用于Android Gradle插件3.0.1。

参考来源是该插件的创建者Niklas在此答案中提供的:https://dev59.com/t14b5IYBdhLWcg3w31BA#33064500


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接