Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Android Studio获得代码覆盖率?_Android_Gradle_Code Coverage_Android Studio - Fatal编程技术网

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

如何使用Android Studio获得代码覆盖率?,android,gradle,code-coverage,android-studio,Android,Gradle,Code Coverage,Android Studio,我正在使用Android Studio开发应用程序。 我能够运行测试代码。 但是,我不知道如何在android studio中获得代码覆盖率 我已经看到了以下链接。 但我迫不及待地要更新到支持emma的v0.6版 项目配置如下。 主代码 MyProject/AppName/src/main/java/mypackage/MyClass.java 测试代码 MyProject/AppName/src/instrumentTest/java/mypackage/test/MyClassTest.j

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

我已经看到了以下链接。

但我迫不及待地要更新到支持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
└─仪器测试
└─java
└─mypackage
└─测试

└─java

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

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

两者都很容易集成

android maven集成:

Maven+Cobertura代码覆盖率示例:


我认为在Android Studio中看不到可视代码覆盖率报告。但是你可以试试Jacoco。您需要将其集成到
build.gradle
文件中。您可以在新的AndroidStudio 1.2中找到

,您可以运行单元测试并查看IDE中的所有内容

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

这对你有帮助

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

在这个配置中,您可以选择

  • 测试种类:“包装内全部”
  • 包:[测试所在的包,例如:“com.myapp.tests”]
  • 搜索测试:跨模块依赖项(可能不同于您的 设置)
  • VM-选项:-ea
  • 工作目录:[您的项目目录]
  • 使用mod的类路径:[选择您的模块]
如果在创建JUnit运行配置时遇到任何问题,请访问指南以获取帮助

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


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


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


有太多的答案显示了如何将
jacoco
插件应用到Android studio项目,该插件已经过时,并且浪费了我太多时间为最近的Android studio(我的Android studio是2.1.2版)找到解决方案

  • Jacoco
    插件是为Android Studio gradle内置的,您需要做的只是如下所示启用它:
建筑类型{ ... 调试{ testCoverageEnabled true } }
  • 完成上述操作后,运行单元测试任务
    
    ./gradlew testDebugUnitTest
    

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

  • 覆盖率文件将在
    /build/reports/Coverage/debug
    文件夹下创建,包括
    index.html
    ,您可以使用浏览器打开它,以及
    report.xml
    ,您可以使用
    jenkins jacoco plugin
    或其他集成工具获取报告

对于那些使用jenkins jacoco插件获得0%覆盖率的用户,请确保使用正确的版本。 引自:

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


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

buildTypes {
        debug {
            testCoverageEnabled true
        }
    }
然后


右键单击test->java包并选择
在java中运行测试并覆盖
以运行所有测试并覆盖代码,或者右键单击特定测试类并单击
运行SampleTest并覆盖

您只需右键单击您感兴趣的包并在“包”中选择
运行“测试”使用覆盖率“

如果您希望获得测试覆盖率(对于插入指令的测试-当“使用覆盖率运行应用程序”未启用时):

将其放入顶级
构建中。gradle

buildscript{    
       ext.jacocoVersion = '0.8.2'

       ...

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

    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
        }
    }
进入您的应用程序级别
build.gradle

buildscript{    
       ext.jacocoVersion = '0.8.2'

       ...

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

    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
文件。(右键单击文件->在浏览器中打开->选择浏览器)

你应该得到类似的东西