web-dev-qa-db-ja.com

jacocoTestReportタスクが生成されない

Android Studio 3.1 Canary 8
Build #AI-173.4529993, built on January 6, 2018
JRE: 1.8.0_152-release-1024-b01 AMD64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.14.14-300.fc27.x86_64

Jacocoを使用してコードカバレッジを生成しようとしています。しかし、./gradlew tasksコマンドを実行すると、jacocoTestReportというタスクが表示されません。

タスク./gradlew jacocoTestReportを実行すると、次のエラーが表示されます。

ルートプロジェクト「EnumSample」にタスク「jacocoTestReport」が見つかりません

これは私のbuild.gradlewファイルです:

apply plugin: 'com.Android.application'
apply plugin: 'jacoco'

Android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "me.androidbox.enumsample"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
        debug {
            testCoverageEnabled true
        }
    }
}

jacoco {
    toolVersion "0.8.0"
}

task jacocoTestReport(type: JacocoReport) {
    executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

    subprojects.each {
        sourceSets it.sourceSets.main
    }

    reports {
        xml.enabled true
        html.enabled false
        csv.enabled false
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:27.0.2'
    implementation 'com.Android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.1'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.1'
}

私はプロジェクトをクリーンアップして再構築しようとしました。ただし、レポートタスクはありません。

提案をありがとう。

9
ant2009

実行する間違ったタスクを検索しています。 ./gradlew tasksを実行すると、createFlavorCoverageReportタスクを見つけることができます。

enter image description here

質問で述べた設定で./gradlew createDevDebugCoverageReportを実行した後、生成されたレポートを/app/build/reports/dev/debugディレクトリで見つけることができました。

7
azizbekian

Jacocoレポートを使用する際に注意しなければならないことがいくつかあります。

app/build.gradleでテストカバレッジを有効化

Android {
    ...
    buildTypes {
        debug {
            testCoverageEnabled true
        }
        ...
    }
}

jacocoレポートのタスクを作成

apply plugin: 'jacoco'

task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {

    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/main/Java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec")
}

jacocoレポートのグラドルコマンド

./gradlew clean jacocoTestReport

jacocoレポートはこちら

JacocoTestReportの実行が成功した後に生成されたjacocoレポートパス。

app/build/reports/coverage/debug/index.html

また、Android jacocoに関連するサンプルリポジトリを1つ作成しました。

https://github.com/jiteshmohite/JacocoAndroidSample

また、アプリケーションディレクトリ内でGradleコマンドを実行していることを確認してください。

上記のサンプルリポジトリを参考にしてください。私はこれを複雑さなしで作成したので、誰もがそれを使いに行くことができます。

6
jitsm555

次の2つがあります。

  • テストするビルドタイプの コードカバレッジを有効にする サポートする必要があります。 build.gradleには、次のものが含まれているはずです(既に含まれています)。

    Android { 
        ... 
        buildTypes { 
            debug { 
                testCoverageEnabled = true 
            } 
            ... 
        } 
        ... 
    }
    
    • レポートを生成するには、gradle testBlueDebugUnitTestCoverageを実行すると、“ build/reports/jacoco/testBlueDebugUnitTestCoverage /”に表示されます
    • これが gitHubの例 です

  • JaCoCoレポートを生成する Gradleプラグイン を使用します。

    次のように設定します。

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.vanniktech:gradle-Android-junit-jacoco-plugin:0.11.0'
        }
    }
    
    apply plugin: 'com.vanniktech.Android.junit.jacoco'
    

報告された問題の別の解決策 ここ

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") { 
    group = "Reporting" 
    description = "Generate Jacoco coverage reports after running tests." 
    reports { 
        xml.enabled = false 
        html.enabled = true 
    } 
    classDirectories = fileTree( 
            dir: './build/classes/debug', 
            excludes: ['**/R.class', 
                       '**/R$*.class', 
                       '**/*$InjectAdapter.class', 
                       '**/*$ModuleAdapter.class', 
                       '**/*$ViewInjector*.class' 
            ]) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files('build/jacoco/testDebug.exec') 

    renamedFilesMap = [:] 

    // Hacky fix for issue: https://code.google.com/p/Android/issues/detail?id=69174. 
    // Rename files with '$$' before generating report, and then rename back after 
    doFirst { 
        new File('build/classes/debug').eachFileRecurse { file -> 
            if (file.name.contains('$$')) { 
                oldPath = file.path 
                newPath = oldPath.replace('$$', '$') 
                file.renameTo(newPath) 
                renamedFilesMap[newPath] = oldPath 
            } 
        } 
    } 
    doLast { 
        renamedFilesMap.each() { 
            newPath, oldPath -> 
                new File(newPath).renameTo(oldPath) 
        } 
    } 

}
3
5377037