如何使用Android Studio获得代码覆盖率?


68

我正在使用Android Studio开发应用程序。
我能够运行测试代码。
但是,我不知道如何在android studio中获得代码覆盖率。

我已经看过以下链接。
Android Gradle代码覆盖率
但是我等不及要更新到支持Emma的v0.6。

项目配置如下。

主代码
MyProject / AppName / src / main / java / mypackage / MyClass.java

测试代码
MyProject / AppName / src / instrumentTest / java / mypackage / test / MyClassTest.java

项目配置
MyProject的
├─build.gradle
└─AppName
    ├─build.gradle
    └─src
        ├─main
        │├─java
        ││└─mypackage
        ││└─MyClass.java
        │├─res
        │└─AndroidManifest.xml
        └─ instrumentTest
            └─java
                └─mypackage
                    └─test
                        └─MyClassTest.java


希望他们有这个,在Eclipse中真的很棒。更容易看到您错过的内容。
JPM

Answers:


62

使用新的Android Studio 1.2,您可以在IDE中运行单元测试并查看覆盖范围。

首先,您需要在IDE中运行单元测试。(如果已经可以,请跳过此步骤)

指南演示将为您提供帮助。

其次,您需要创建一个JUnit Run配置

在此处输入图片说明

在此配置中,您可以选择

  • 测试类型: “全部包装”
  • 程序包: [测试所在的程序包,例如:“ com.myapp.tests”]
  • 搜索测试:跨模块依赖性(可能与您的设置有所不同)
  • VM-选项: -ea
  • 工作目录: [您的项目目录]
  • 使用mod的类路径: [选择您的模块]

如果在创建JUnit运行配置时遇到任何问题,则应访问指南以获得帮助。

最后,在最新的Android Studio中,您应该能够通过单击“以Coverage运行”按钮来运行JUnit运行配置。


在Android Studio 2.1.3中,is标签Run Unit tests with CoveragewhereUnit test是您的测试配置的名称,如以下屏幕截图所示:

Android Studio:“使用Coverage运行单元测试”按钮


15
很好的答案是,“ Run with Coverage”按钮是关键,默认情况下位于“ Debug”按钮的右侧。
Meanman

1
要通过命令行执行此操作,您很可能需要使用JaCoCo之类的工具。docs.gradle.org/current/userguide/jacoco_plugin.html将是一个不错的起点。
卡雷布

32

太多的答案显示了如何将jacoco插件应用于Android Studio项目,这已经过时了,浪费了我太多的时间来寻找最新的Android Studio(我的Android Studio版本为2.1.2)的解决方案。

  • Jacoco 该插件是为Android Studio gradle内置的,您需要做的就是像下面这样启用它:
  buildTypes {
    ...
    调试{
      testCoverageEnabled是
    }
  }
  • 完成上述操作后,运行单元测试任务 ./gradlew testDebugUnitTest

  • 然后创建coverage文件: ./gradlew createDebugCoverageReport

  • 覆盖率文件将在<module>/build/reports/coverage/debug文件夹include中创建index.html,您可以使用浏览器将其打开,并report.xml可以使用它来获取报告,jenkins jacoco plugin或者由其他持续集成工具获得。

对于那些谁得到了0%的覆盖率jenkins jacoco plugin,一定要使用正确的版本。从他们的网站报价:

不幸的是,JaCoCo 0.7.5破坏了与jacoco.exec文件以前的二进制格式的兼容性。版本1.0.19之前的JaCoCo插件基于JaCoCo 0.7.4,因此您不能在已经使用JaCoCo 0.7.5或更高版本的项目中使用此版本。从2.0.0版本开始的JaCoCo插件使用JaCoCo 0.7.5,因此还需要在您的项目中使用此版本。如果您仍使用JaCoCo 0.7.4或更低版本,请坚持使用JaCoCo插件1.0.19或更低版本


1
使用内置的Jacoco,我得到0%的覆盖率。有人知道如何解决这个问题吗?(使用gradle 2.2.3)
最白目

我在较新的三星设备上获得了0%的利润,其他设备运行良好。
某人

我在“ reports / jacoco”文件夹下得到了报告
W00di 9:49



2

您是否尝试过使用Jacoco插件来获取项目的代码覆盖率?这是一个很好的插件,可根据您的软件包或单个类为您提供服务。我不确定如何配置Jacoco以与Gradle一起使用,因为我使用Maven。检查链接:查看是否对您有帮助


我尝试了如何在Android Studio中设置JaCoCo,但是它没有用。我有如下相同的结果。stackoverflow.com/questions/18358297/… 我检查了其他方法,如何在Android Studio中设置JaCoCo,但没有得到解决方案。stackoverflow.com/search?q=android+jacoco 请告诉我您是否知道如何在Android Studio中设置JaCoCo。
h.usune14年

@ h.usune对我来说同样的问题。如果找到解决方案,请给我打电话。
2014年

gradle.org/docs/current/userguide/jacoco_plugin.html ..这应该有助于您在gradle上设置jacoco。
user2511882 2014年


2

在模块build.gradle文件中启用testCoverage

buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

接着

右键单击测试-> Java包,然后选择Run Tests in Java with Coverage运行所有具有代码覆盖率的测试,或者右键单击特定的测试类,然后单击Run SampleTest with Coverage


1

如果您想获得测试范围(对于仪器化测试-未启用“使用Coverage运行应用程序”时):

把它放到顶层build.gradle

buildscript{    
       ext.jacocoVersion = '0.8.2'

       ...

        dependencies {
            classpath "org.jacoco:org.jacoco.core:$jacocoVersion"
        }
}

进入您的应用程序级别build.gradle

 ...

    apply plugin: 'jacoco'

    jacoco {
        toolVersion = "$jacocoVersion"
    }

    tasks.withType(Test) {
        jacoco.includeNoLocationClasses = true
    }

    task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

        reports {
            xml.enabled = true
            html.enabled = true
        }

        def fileFilter = [
                '**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*', '**/*$[0-9].*'
        ]
        def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
        def mainSrc = "$project.projectDir/src/main/kotlin"

        sourceDirectories = files([mainSrc])
        classDirectories = files([debugTree])
        executionData = fileTree(dir: project.buildDir, includes: [
                'jacoco/testDebugUnitTest.exec', 'outputs/code_coverage/debugAndroidTest/connected/**/*.ec'
        ])
    }


   android {

        ...

        buildTypes {
            debug {
                testCoverageEnabled true
        }
    }

然后,您应该编写测试,测试必须通过。如果您确定测试通过了,请将该代码写入终端:

gradlew connectedCheck

它将运行您的测试。如果您做对了所有事情,那么应该在应用程序->构建->报告->覆盖范围中获取报告文件。您必须打开index.html文件。(右键单击文件->在浏览器中打开->选择浏览器)

您应该得到类似的东西。 在此处输入图片说明

它正在我的项目中工作。也许有更好更好的解决方案。如果我忘记了要在此处写下的内容,请发表评论。



0

您可以右键单击您感兴趣的软件包,然后选择 Run 'Tests in "package" with coverage'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.