Kotlinで書いたテストケースのコードカバレッジを確認しようとしています。 ./gradlew createDebugCoverageReport --info
を実行すると、coverage.ecファイルが空になり、レポートに0%のカバレッジがあることが示されます。テストケースは100%成功していることに注意してください。誰も私のcoverage.ecファイルが0バイトを返し続ける理由を考えることができますか?
私は運よくどこでも検索しました。
apply plugin: 'com.Android.library'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'jacoco'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
testCoverageEnabled = true
}
release {
minifyEnabled false
testCoverageEnabled = true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.Android.support:appcompat-v7:25.4.0'
testImplementation 'junit:junit:4.12'
implementation files('pathtosomejarfile')
}
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDir = file("$buildDir/customJacocoReportDir")
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'Android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/androidTest/Java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
])
}
生成された.classファイルの2つの異なるディレクトリを定義することにより、JavaとKotlinコードの両方で行ごとのカバレッジを取得できます。
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def kotlinDebugTree = fileTree(dir: "${buildDir}/tmp/kotlin-classes/debug", excludes: fileFilter)
次に、classDirectoriesに両方のfileTreesを含めるだけです。
classDirectories = files([debugTree], [kotlinDebugTree])
数日後、私はこの問題の解決策を見つけました。同様の問題が発生している人の場合:中間フォルダーにtmpフォルダーが必要です。このフォルダーには、Kotlinファイルの.classファイルが含まれています。 fileTree(dir: "$ {buildDir}/intermediates/classes/debug"、excludes:fileFilter)のパスをそれらのクラスファイルのある場所に変更すると、Jacocoはコードカバレッジを生成します!この方法を使用して、カバレッジの完全な行ごとの概要を表示することはできないことに注意してください。