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

h.u*_*une 65 android code-coverage gradle android-studio

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

我已经看到以下链接.
Android Gradle Code Coverage
但我迫不及待地想要更新到支持emma的v0.6.

项目配置如下.

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

测试代码
MyProject的/ AppName的/ src目录/ instrumentTest/JAVA/mypackage的/测试/ MyClassTest.java

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

Cal*_*leb 59

使用新的Android Studio 1.2,您可以运行单元测试并查看IDE中的所有内容.

首先,您需要在IDE中运行单元测试.(如果你已经可以,那么跳过这一步)

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

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

在此输入图像描述

在这个配置中,你将能够选择

  • 测试种类: "全包装"
  • 包: [您的测试所在的包,例如:"com.myapp.tests"]
  • 搜索测试:跨模块依赖(可能是您的设置差异)
  • VM -options: -ea
  • 工作目录: [您项目的目录]
  • 使用mod的classpath: [选择你的模块]

如果您在创建JUnit运行配置时遇到任何问题,请访问指南以获取帮助.

最后,在最新的Android Studio中,您应该能够通过单击"Run with Coverage"按钮来运行JUnit-Run配置.


在Android Studio中2.1.3 IS标签Run Unit tests with Coverage哪里Unit test是在下面的截图显示您的测试配置的名称:

Android Studio:

  • 很棒的答案,'Run with Coverage'按钮是关键,默认情况下位于'Debug'按钮的右侧. (14认同)

xfd*_*dai 30

有很多答案显示如何将jacoco插件应用到Android工作室项目,这已经过时,并且浪费了我很多时间来找出最近Android工作室的解决方案(我的Android Studio是版本2.1.2).

  • Jacoco 插件内置于Android Studio gradle中,您需要做的就是启用它,如下所示:
  buildTypes {
    ...
    debug {
      testCoverageEnabled true
    }
  }
  • 完成上述操作后,运行单元测试任务 ./gradlew testDebugUnitTest

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

  • 覆盖文件将在<module>/build/reports/coverage/debug文件夹下创建,包含index.html,您可以使用浏览器打开它report.xml,您可以使用它来获取报告jenkins jacoco plugin或其他继续集成工具.

对于那些获得0%覆盖率的人jenkins jacoco plugin,请务必使用正确的版本.从他们的网站引用:

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

  • 我使用内置的 Jacoco 获得了 0% 的覆盖率。有人知道如何解决这个问题吗?(使用gradle 2.2.3) (2认同)

Mar*_*rci 5

如果您想获得测试覆盖率(对于仪器测试 - 当未启用“运行具有覆盖率的应用程序”时):

将其放入您的顶层build.gradle

buildscript{    
       ext.jacocoVersion = '0.8.2'

       ...

        dependencies {
            classpath "org.jacoco:org.jacoco.core:$jacocoVersion"
        }
}
Run Code Online (Sandbox Code Playgroud)

进入您的应用程序级别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
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

gradlew connectedCheck
Run Code Online (Sandbox Code Playgroud)

它将运行您的测试。如果一切正确,您应该在应用程序 -> 构建 -> 报告 -> 覆盖率中获得一个报告文件。您必须打开该index.html文件。(右键单击文件 -> 在浏览器中打开 -> 选择浏览器)

你应该得到与此类似的东西。 在此输入图像描述

它正在我的项目中工作。也许有更好、更简单的解决方案。如果我忘了在这里写什么,请写评论。