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

我正在使用 Android Studio 开发应用程序。
我运行了测试代码。
但是,我不知道如何获得代码覆盖在安卓工作室。

我已经看到了以下链接。
Android Gradle Code Coverage 安卓级别代码覆盖率
但我等不及要看0.6版支持 Emma 的更新了。

项目配置如下。

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

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

项目配置
我的项目
普通的建筑材料
应用程式名称
普通的建筑材料
有嫌疑人
主路
│日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本日本
圣诞快乐
校对‧‧‧‧
校园日报
校对: 耶稣受难者ー AndroidManifest.xml
受害人ー仪器测试
被指控的是爪哇咖啡
我的包裹
测试
受影响者ー MyClassTest.java < br/>

77835 次浏览

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

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

两者都很容易整合

Android Maven 集成:

Http://www.vogella.com/tutorials/androidbuildmaven/article.html

Maven + Cobertura 代码覆盖范围示例:

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

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

使用新的 Android Studio 1.2,您可以运行您的单元测试,并在 IDE 中看到所有的覆盖率。

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

这个 向导小样会帮助你。

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

enter image description here

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

  • 测试类型: “ All in Package”
  • 包: [您的测试所在的包,例如: “ com.myapp.tests”]
  • 搜索测试: 跨模块依赖(可能对您的 安装)
  • VM-options: -ea
  • 工作目录: [您的项目目录]
  • 使用 mod 的类路径: [选择您的模块]

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

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


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

Android Studio: "Run Unit tests with Coverage" button

Android 工作室 gradle 内置了 Jacoco 插件,你可以用它来查找代码覆盖率。我已经作为文章一步一步地配置 jaococo 来查找 Espresso 测试用例的代码覆盖率,但是您也可以将其用于 Robodium。看看这个。

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

有太多的答案说明了如何将 jacoco插件应用到 Android 工作室项目中,这个插件已经过时了,并且浪费了我太多的时间来为最近的 Android 工作室找到解决方案(我的 Android 工作室是2.1.2版本)。

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

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

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

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

不幸的是,JaCoCo0.7.5破坏了与以前二进制文件的兼容性 Exec 文件的格式 1.0.19基于 JaCoCo0.7.4,因此您不能将此版本用于已经使用 JaCoCo0.7.5或更新版本的项目。JaCoCo 插件 从版本2.0.0开始使用 JaCoCo0.7.5,因此还需要 这个版本将在您的项目中使用。请坚持使用 JaCoCo 如果您仍然使用 JaCoCo0.7.4或更低版本,请使用1.0.19或更低版本的 plugin1.0.19

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

buildTypes {
debug {
testCoverageEnabled true
}
}

然后

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

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

如果你想得到你的测试覆盖率(对于检测测试-当‘ Run the app with 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文件。(右键单击文件-> 在浏览器中打开-> 选择一个浏览器)

你应该买个类似的。 enter image description here

它在我的项目中起作用。也许有一个更好更简单的解决方案。 如果我在这里忘了写东西,请写评论。