我正在尝试使用Gradle Android插件0.10.2获取测试覆盖率报告 . 但是在运行一些测试后我仍然无法获得覆盖率报告 . (connectedAndroidTest) .
我的主模块的build.gradle是:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
debug {
testCoverageEnabled true
}
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
}
而project的build gradle的buildscript部分是:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
}
}
从终端运行 gradlew connectedAndroidTest
后,我可以在 build
文件夹中找到 coverage-instrumented-classes
和 code-coverage
文件夹 . 但我找不到 reports
文件夹中的 coverage
文件夹 . (只有我能看到的是 androidTests
文件夹)
获取jacoco覆盖报告有什么遗漏吗?
5 回答
如果要使用与默认版本不同的版本,请添加
在应用的
build.gradle
中的android
标记内 .查找最新版本号的一种方法:在JCenter上搜索"org.jacoco:jacoco" .
通过数百次搜索获得报道的答案,我终于找到了我想要的确切答案 .
从this blog post开始,我发现
gradlew createDebugCoverageReport
创建了jacoco覆盖率报告 .另外,从gradle插件source code开始,该插件默认使用jacoco 0.6.2.201302030002 . (因此, jacoco version definition is not required 如果您打算使用默认版本)
总之,使用Android gradle插件获取
jacoco
覆盖率报告的 ESSENTIAL 步骤是:Android gradle插件版本 0.10.0 或更高版本(通常在您项目的
build.gradle
中)将
testCoverageEnabled true
添加到您想要的构建类型(即debug
)运行
$ gradlew createDebugCoverageReport
或gradlew connectedCheck
以获取jacoco
覆盖率报告 .您可以在
build/reports/coverage/{buildType}
找到您的承保范围报告 . (即build/reports/coverage/debug
用于调试版本)(从@ odiggity的评论中添加多味案例)
如果您的项目使用多风味配置,请改用
create{flavorName}CoverageReport
. 覆盖率报告将在build/reports/coverage/{flavorName}/{buildType}
生成 .使用调试构建类型调整krInternal的示例:
命令:
./gradlew createKrInternalDebugCoverageReport
报告内容:
build/reports/coverage/krInternal/debug
提示:
由于您只能使用
emulator
和device with root permission
获取覆盖率报告,因此在常规(非根)设备上运行命令后会出现以下错误:因为我的声誉低于50,所以必须添加答案而不是评论...
我想补充的是:
谷歌发布了新的构建工具来修复令人讨厌的"VerifyError"(link)问题 .
如果遇到“VerifyError”问题,请尝试更改gradle中的设置以使用最新的构建工具 . 例如,
由于21.0.0构建工具存在问题,请使用大于21.0.0的版本 . 我用21.1.1 .
我为此创建了open source plugin .
Root build.gradle
然后简单地执行
它将运行JUnit测试,然后在调试构建类型的相应构建目录中以xml和html形式提供Jacoco输出 .
Gradle已经内置了对生成测试覆盖率报告的支持,我们不需要创建任何其他配置或添加任何插件来生成测试覆盖率报告 . 基本上,我们唯一需要做的是在
build.gradle
文件中将testCoverageEnabled
参数设置为true
,如下所示:接下来,我们可以从CLI执行以下Gradle任务:
在Windows上,我们可以这样执行:
任务将分析
/src/main/java/
目录中的项目代码和/src/androidTest/java/
目录中的单元测试 . 执行此任务后,我们可以在模块的以下目录中找到测试覆盖率报告:当我们打开
index.html
文件时,我们可以看到来自测试覆盖的可视化报告,可以在Web浏览器中查看 .它看起来如下图所示 .
有关Android应用程序中测试覆盖率报告的文章http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/