JaCoCo gradleプラグインを追加したので、アンドロイドプロジェクトのJUnitテストでコードカバレッジレポートを生成したかったのです。それは./gradlew jacocoFullReport
を実行して、素晴らしい作品RobolectricテストでJaCoCoが動作しない
apply plugin: 'jacoco'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-beta6'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
subprojects { prj ->
apply plugin: 'jacoco'
jacoco {
toolVersion '0.7.6.201602180812'
}
task jacocoReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
group = 'Reporting'
description = 'Generate Jacoco coverage reports after running tests.'
reports {
xml {
enabled = true
destination "${prj.buildDir}/reports/jacoco/jacoco.xml"
}
html {
enabled = true
destination "${prj.buildDir}/reports/jacoco"
}
}
classDirectories = fileTree(
dir: 'build/intermediates/classes/debug',
excludes: [
'**/R*.class',
'**/BuildConfig*',
'**/*$$*'
]
)
sourceDirectories = files('src/main/java')
executionData = files('build/jacoco/testDebugUnitTest.exec')
doFirst {
files('build/intermediates/classes/debug').getFiles().each { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
}
jacoco {
toolVersion '0.7.6.201602180812'
}
task jacocoFullReport(type: JacocoReport, group: 'Coverage reports') {
group = 'Reporting'
description = 'Generates an aggregate report from all subprojects'
//noinspection GrUnresolvedAccess
dependsOn(subprojects.jacocoReport)
additionalSourceDirs = project.files(subprojects.jacocoReport.sourceDirectories)
sourceDirectories = project.files(subprojects.jacocoReport.sourceDirectories)
classDirectories = project.files(subprojects.jacocoReport.classDirectories)
executionData = project.files(subprojects.jacocoReport.executionData)
reports {
xml {
enabled = true
destination "${buildDir}/reports/jacoco/full/jacoco.xml"
}
html {
enabled = true
destination "${buildDir}/reports/jacoco/full"
}
}
doFirst {
//noinspection GroovyAssignabilityCheck
executionData = files(executionData.findAll { it.exists() })
}
}
:これは私のプロジェクトレベルbuild.gradle
ファイルです。しかし残念ながら、RobolectricTestRunner
で実行されるテストでは、カバレッジは報告されません(テストで明示的に呼び出される命令は、カバーされていると報告されていません)。 @RunWith
注釈なしでテストするか、MockitoJUnitTestRunner
で実行しても問題はありません。
この問題を解決する助けとなることがあります。
更新1:私はRobolectricGradleTestRunner
を使用する必要があることに気付きました。しかし、それは役に立たなかった。
私はこれは間違いなく可能であることを言いたいが、私はそれを修正する方法は考えてきません。私は古い仕事でRobolectricのコードカバレッジを取得することができましたが、それは1年前です。もうコードにアクセスできなくなりました。申し訳ありませんが私はより多くの助けになることはできません! –
'testCoverageEnabled'以降のバージョンではJacocoを使用していますので、プラグインを適用する必要はありません。プラグインなしで試してみてください。 –
@NikolaDespotoski私は、testCoverageEnabledをtrueに設定することは、接続されたデバイスを必要とするアンドロイド計測テストでのみ機能すると考えています。それがRobolectricを使って回避しようとしているのです。 – Longi