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

时间:2013-09-08 11:14:26

标签: android gradle code-coverage android-studio

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

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

项目配置如下。

主要代码
MyProject的/ AppName的/ SRC /主/爪哇/ 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

9 个答案:

答案 0 :(得分:59)

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

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

guidedemo会对您有所帮助。

其次,您需要创建JUnit运行配置

enter image description here

在此配置中,您可以选择

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

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

最后,在最新的Android Studio中,您应该可以通过点击' Run with Coverage'来运行您的JUnit-Run配置。按钮。

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

Android Studio: "Run Unit tests with Coverage" button

答案 1 :(得分:25)

有很多答案显示如何将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来获取报告{ {1}}或其他继续集成工具。

对于jenkins jacoco plugin 0%覆盖率的用户,请务必使用正确的版本。 引自their site

  

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

答案 2 :(得分:2)

您是否尝试过使用Jacoco插件获取项目的代码覆盖率?这是一个很好的插件,可以根据您的套餐或个别课程为您提供保险。因为我使用Maven,我不确定你如何配置Jacoco与Gradle一起使用。 Check the link:看看它是否有帮助

答案 3 :(得分:2)

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

两者都非常容易整合

android maven整合:

  

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

Maven + Cobertura代码覆盖范例:

  

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

答案 4 :(得分:2)

我认为您无法在Android Studio中看到可视代码覆盖率报告。但你可以试试Jacoco。您需要将其集成到build.gradle文件中。您可以找到similar question & solution here

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

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

将其放入您的顶级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文件。 (右键单击文件->在浏览器中打开->选择浏览器)

您应该得到类似的东西。 enter image description here

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

答案 7 :(得分:0)

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

buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

然后

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

答案 8 :(得分:0)

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