Adr*_*3nl 17 android code-coverage gradle jacoco test-coverage
我一直试图在一段时间内安静地进行Jacoco测试覆盖.我在这些主题中尝试了几种可能的解决方案:
使用JaCoCo Gradle插件的Android测试代码覆盖率
如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?
我正在使用genymotion在一个emulatated设备中运行测试.这是我添加到build.gradle的内容:
apply plugin: 'jacoco'
android{
jacoco {
version "0.7.1.201405082137"
}
buildTypes{
debug{
testCoverageEnabled = true
}
}
}
jacoco {
toolVersion "0.7.1.201405082137"
}
Run Code Online (Sandbox Code Playgroud)
要运行它,我会使用类似的东西
./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport
Run Code Online (Sandbox Code Playgroud)
相关生成的文件/文件夹是:
/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
Run Code Online (Sandbox Code Playgroud)
但是,@ build/reports/jacoco/test/html/index.html或任何html页面/代码覆盖率报告@/build/outputs都没有.
我还尝试创建一个专门的任务来构建一个覆盖率报告:
def coverageSourceDirs = [
'src/main/java',
]
task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/jacoco/connectedAndroidTestMyFlavorDebug.exec")
// Bit hacky but fixes https://code.google.com/p/android/issues/detail?id=69174.
// We iterate through the compiled .class tree and rename $$ to $.
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后./gradlew clean和./gradlew jacocoTestReport.输出与上面相同,因此,没有带覆盖报告的html页面或任何其他覆盖文件.
我目前正在使用带有最新gradle版本的Android Studio v1.0.2.我是一个相当新的gradle,所以我可能会遗漏一些基本的东西.
谢谢
Adr*_*3nl 10
花了一整天追逐这个问题我发现了什么问题.与我看到的示例相反,testDebug构建生成的文件不是.exec文件@ $ buildDir/jacoco/testDebug.exec.
使用我的gradle和studio版本生成的文件是.ec @ build/outputs/code-coverage/connected/flavors/myFlavor/coverage.ec
我没有找到任何与此相关的相关信息.然而,这可能是最近的更改,通过创建自定义JacocoReport任务并相应地更改executionData变量我已经解决了问题.这是我的实现:
task jacocoTestReport(type: JacocoReport) {
def coverageSourceDirs = [
'src/main/java'
]
group = "Reporting"
description = "Generates Jacoco coverage reports"
reports {
xml{
enabled = true
destination "${buildDir}/reports/jacoco/jacoco.xml"
}
csv.enabled false
html{
enabled true
destination "${buildDir}/jacocoHtml"
}
}
classDirectories = fileTree(
dir: 'build/intermediates/classes',
excludes: ['**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*Activity*.*',
'**/*Fragment*.*'
]
)
sourceDirectories = files(coverageSourceDirs)
additionalSourceDirs = files(coverageSourceDirs)
executionData = files('build/outputs/code-coverage/connected/flavors/smartcompanion/coverage.ec')
}
Run Code Online (Sandbox Code Playgroud)
小智 6
使用 Jacoco 和 Android Flavors 的测试覆盖率报告:
假设您有名为“免费”和“付费”的口味
在 build.gradle 存在的项目模块目录(默认为应用程序)中创建文件 jacoco.gradle ,它应该在 build.gradle 文件的旁边。目录结构如下图
>app > jacoco.gradle
Run Code Online (Sandbox Code Playgroud)
将下面的代码粘贴到我们在步骤 1 中创建的文件中,该代码具有自我解释性的注释以供理解
>app > jacoco.gradle
Run Code Online (Sandbox Code Playgroud)
在 android studio 终端中运行以下命令来构建应用程序
./gradlew clean assemble
Run Code Online (Sandbox Code Playgroud)
在构建成功时,运行以下命令以生成测试报告(将字符串更改testFreeDebugUnitTestCoverage为您的特定风格/构建类型,例如付费版本命令将是./gradlew testPaidDebugUnitTestCoverage)
./gradlew testFreeDebugUnitTestCoverage
Run Code Online (Sandbox Code Playgroud)
它应该在终端中给出成功消息,现在转到目录
>app > build > reports >jacoco >${testName} >look for html or xml file report file
Run Code Online (Sandbox Code Playgroud)
现在您可以在浏览器中打开并查看 html 测试覆盖率文件
| 归档时间: |
|
| 查看次数: |
8795 次 |
| 最近记录: |