2017-11-26 22 views
2

私はAndroid Gradle Plugin 3.0.0を使用しています。ヤココは、AndroidプロジェクトでユニットテストでKotlinクラスの0カバレッジを報告しています

私はjavaからkotlinにAndroidアプリを移行しています。私のアプリはJavaとKotlinでクラスを持ち、テストはJavaで行われています。

私は./gradlew clean jacocoTestReportを実行します。

ユニットテスト(src/test)と計測テスト(src/androidTest)の両方を実行します。

app/build/reports/jacoco/jacocoTestReport/html/index.htmlにjacocoによって作成されたレポートは、実際にユニットテストでカバーされているKotlinクラスのカバレッジを示していません。

このレポートには、計装テストからのカバレッジが正しく表示されます。

注:私は正確に同じ問題ではありませんこれらの他の質問、出くわした:

関連する部分:

apply plugin: 'jacoco' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-kapt' 
... 
android { 
    defaultConfig { 
     sourceSets { 
      main.java.srcDirs += "$projectDir/src/main/kotlin" 
     } 
    } 

    testOptions { 
     unitTests { 
      all { 
       jvmArgs '-noverify', '-ea' 
      } 
      includeAndroidResources = true 
     } 
    } 
} 

dependencies { 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
    .... 
} 

jacoco { 
    toolVersion '0.7.9' 
} 

task jacocoTestReport(type: JacocoReport, dependsOn: ["testDebugUnitTest", "createDebugCoverageReport"]) { 
    reports { 
     html.enabled = true 
    } 
    classDirectories = fileTree(
      dir: "${buildDir}", 
      includes: ["tmp/kotlin-classes/debug/ca/rmen/android/poetassistant/**/*.class", 
         "intermediates/classes/debug/ca/rmen/android/poetassistant/**/*.class"], 
      excludes: ["**/R.class", "**/R*.class", "**/Manifest.class", "**/Manifest*.class", "**/BuildConfig.class", 
         // ignore databinding generated code: 
         "**/ca/rmen/android/poetassistant/databinding/*.class", 
         ... other excludes ... 
         "**/ca/rmen/android/poetassistant/BR.class", 
         "**/com/android/**/*.class"]) 
    sourceDirectories = files("${project.projectDir}/src/main/java", "${project.projectDir}/src/main/kotlin") 
    executionData = fileTree(
      dir: "${buildDir}", 
      includes: [ 
        "jacoco/testDebugUnitTest.exec", 
        "outputs/code-coverage/connected/*coverage.ec" 
      ]) 
} 

答えて

3

私は次のようにjacocoレポートは、ユニットテストでKotlinクラスのカバレッジを反映させるために、私のGradleファイルにincludeNoLocationClasses = trueを追加する必要がありました:

注:このソリューションは、コマンドラインからテストを実行するために機能しますが、Androidスタジオ内のカバレッジで実行しても0%のカバレッジが得られます。