android获得本地单元测试的报道

时间:2016-10-14 22:29:47

标签: android code-coverage jacoco

我一直在尝试为我的本地单元测试获取代码覆盖率并且没有成功。

以下是本地单元测试的含义参考。

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运行本地单元测试,一切正常。我点击了我的“测试”模块,然后点击“运行带覆盖的测试”。

2 个答案:

答案 0 :(得分:4)

所以,我找到了自己问题的答案。奇怪的是,看起来运行“testDebugUnitTest”并设置“testCoverageEnabled”标志是正确的方法。

然而,由于显然gradle的jacoco版本与Android Studio和我的CI系统(Jenkins)中运行的jacoco版本不同,由于jacoco中的一些向后兼容性问题,因此无法查看。

要解决此问题,我将我的jacoco版本在gradle中设置为Android Studio(Intellij)和Jenkins中的相同版本。

jacoco {
    toolVersion = '0.7.0.201403182114'
}

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

答案 1 :(得分: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 plugin 3.0.1上验证了这个。

作为参考,我的来源是插件创建者Niklas的回答:https://stackoverflow.com/a/33064500/390718