Покрытие Android с помощью JaCoCo - ручное тестирование - PullRequest
0 голосов
/ 19 февраля 2019

У меня проблемы с настройкой jacoco с Android, чтобы получить покрытие для ручного тестирования.Я могу сгенерировать файл .exec при тестировании приложения вручную.Однако при запуске jacocoTestReport с файлом .exec создаются отчеты без покрытия:

enter image description here

Я уже следовал следующим учебным пособиям и темам, не решая эту проблему:

В сборке.gradle У меня есть

    jacoco{
        version "0.7.9"
    }
    sourceSets {
        main {
            resources.includes = ['**/jacoco-agent.properties']
        }
    }

    task jacocoTestReport(type:JacocoReport) {
        group = "Reporting"
        description = "Generate Jacoco coverage reports"
        // exclude auto-generated classes and tests
        def fileFilter = ['**/R.class', '**/R$*.class',
                '**/BuildConfig.*', '**/Manifest*.*',
                'android/**/*.*']
        def debugTree = fileTree(dir:
        "${project.buildDir}/intermediates/classes/debug",
                excludes: fileFilter)
        def mainSrc = "${project.projectDir}/src/main/java"
        sourceDirectories = files([mainSrc])
        classDirectories = files([debugTree])
        additionalSourceDirs = files([
                "${buildDir}/generated/source/buildConfig/debug",
                "${buildDir}/generated/source/r/debug"
    ])
        executionData = fileTree(dir: project.projectDir, includes:
            ['**/*.exec', '**/*.ec'])
        reports {
            xml.enabled = true
            xml.destination = "${buildDir}/jacocoTestReport.xml"
            csv.enabled = false
            html.enabled = true
            html.destination = "${buildDir}/reports/jacoco"
        }
    }

В методе onStop () у меня есть:

protected void onStop() {
    String TAG = "jacoco";
    // use reflection to call emma dump coverage method, to avoid
    // always statically compiling against emma jar
    String coverageFilePath = "/sdcard/coverage.exec";
    java.io.File coverageFile = new java.io.File(coverageFilePath);
    try {
        Class<?> emmaRTClass = Class.forName("com.vladium.emma.rt.RT");
        Method dumpCoverageMethod = emmaRTClass.getMethod("dumpCoverageData",
                coverageFile.getClass(), boolean.class, boolean.class);

        dumpCoverageMethod.invoke(null, coverageFile, false, false);
        Log.e(TAG, "generateCoverageReport: ok");
    } catch (Exception  e) {
        new Throwable("Is emma jar on classpath?", e);
    }
    super.onStop();
    EventBus.getDefault().unregister(this);
}

Внутри папки ресурсов у меня есть файл "jacoco-agent.properties".В этом файле у меня есть:

destfile=/storage/sdcard/coverage.exec

Я тестирую на эмуляторе Android 6.0 с Android Studio 3.3.1.

...