73

我正在使用 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

4

9 回答 9

67

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

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

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

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

在此处输入图像描述

在此配置中,您可以选择

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

如果您在创建 JUnit 运行配置时遇到任何问题,您应该访问指南寻求帮助。

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


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

安卓工作室:

于 2015-05-11T21:08:52.690 回答
37

有很多答案展示了如何将jacoco插件应用于 Android Studio 项目,这些项目已经过时,浪费了我很多时间来找出最近 Android Studio 的解决方案(我的 Android Studio 是 2.1.2 版)。

  • Jacoco插件是为 Android Studio gradle 内置的,您只需启用它,如下所示:
  构建类型 {
    ...
    调试{
      testCoverageEnabled 真
    }
  }
  • 完成上述操作后,运行单元测试任务 ./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 或更低版本

于 2016-09-01T04:50:04.773 回答
3

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

buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

接着

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

于 2019-10-15T16:48:33.547 回答
2

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

于 2013-12-27T02:00:56.727 回答
2

我们使用 maven 构建我们的应用程序并使用 cobertura 进行代码覆盖率报告

两者都很容易集成

安卓 Maven 集成:

http://www.vogella.com/tutorials/AndroidBuildMaven/article.html

Maven + Cobertura 代码覆盖率示例:

http://www.mkyong.com/qa/maven-cobertura-code-coverage-example/

于 2014-04-24T19:17:25.463 回答
2

我认为您无法在 Android Studio 中看到可视化代码覆盖率报告。但你可以试试Jacoco。您需要将其集成到您的build.gradle文件中。您可以在此处找到类似的问题和解决方案

于 2014-06-15T15:48:58.053 回答
2

Android studio gradle 具有内置的 Jacoco 插件,您可以使用它来查找代码覆盖率。我已经写了一篇文章来逐步配置 jaococo 以查找 Espresso 测试用例的代码覆盖率,但您也可以将它用于 Robotium。看一下这个。

http://qaautomated.blogspot.in/2016/03/how-to-find-code-coverage-with-jacoco.html

于 2016-03-16T07:25:42.523 回答
2

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

把它放到你的顶层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

它将运行您的测试。如果你做对了,你应该在 app -> build -> reports -> coverage 中得到一个报告文件。您必须打开index.html文件。(右键文件->在浏览器中打开->选择浏览器)

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

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

于 2020-04-09T15:37:25.993 回答
0

您只需右键单击您感兴趣的包并选择Run 'Tests in "package" with coverage'

于 2020-01-22T12:33:40.657 回答