如何使用Android Studio获得代码覆盖率?
我正在使用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中获得代码覆盖率 我已经看到了以下链接。
但我迫不及待地要更新到支持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的类路径:[选择您的模块]
在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版)找到解决方案
插件是为Android Studio gradle内置的,您需要做的只是如下所示启用它:Jacoco
- 完成上述操作后,运行单元测试任务
./gradlew testDebugUnitTest
- 然后创建覆盖率文件:
./gradlew CreateDebuggerPort
- 覆盖率文件将在
文件夹下创建,包括/build/reports/Coverage/debug
,您可以使用浏览器打开它,以及index.html
,您可以使用report.xml
或其他集成工具获取报告jenkins jacoco plugin
在模块
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
文件。(右键单击文件->在浏览器中打开->选择浏览器)
你应该得到类似的东西