16

jacoco が実際のデバイスで実行されるインストルメンテーション テストのカバレッジ ファイルを作成する場所を定義しようとしています。

gradle タスクの実行から、--debug次のログが表示されます。

[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': installing /home/martin/workspace/lib/my-lib/build/outputs/apk/my-lib-debug-androidTest-unaligned.apk
[INFO] [org.gradle.api.Task] Starting 1 tests on Nexus 5X - 6.0.1
[INFO] [org.gradle.api.Task]  de.my.lib.utils.UtilsTest testMyTest[Nexus 5X - 6.0.1] [32mSUCCESS [0m
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': fetching coverage data from /data/data/de.my.lib.test/coverage.ec
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': uninstalling de.my.lib.test 13:46:14.538
[DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':my-lib:connectedDebugAndroidTest'

場所を定義するために3つの方法を試しました:

マニフェスト ファイルでタグを使用して<instrumentation>も、何も変わりませんでした。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="de.my.lib.test"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <instrumentation
        android:name="android.support.test.runner.AndroidJUnitRunner"
        xmlns:tools="http://schemas.android.com/tools"
        android:targetPackage="de.my.lib.test"
        tools:replace="android:targetPackage">
        <meta-data
            android:name="coverage"
            android:value="true" />
        <meta-data
            android:name="coverageFile"
            android:value="/sdcard/coverage.ec" />
    </instrumentation>
</manifest>

私はgradleでそれを試しましたが、出力は同じでした:

defaultConfig {
    // unimportant stuff
    testApplicationId "de.my.lib.test"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    testInstrumentationRunnerArgument('coverageFile', '/sdcard/coverage.ec')
}

adbそして最後に、コマンドで試しました:

adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec de.my.lib.test/android.support.test.runner.AndroidJUnitRunner

しかし、2つのエラーが発生します:

de.my.lib.utils.UtilsTest:. クラスが見つかりませんでした: org.jacoco.agent.rt.internal_773e439.CoverageTransformer 。時間: 0,072

OK (1 回のテスト)

エラー: エマ カバレッジの生成に失敗しました。

私はここで完全に迷っています。何か案は?

背景別の場所に保存する必要がある理由:adb shell run-as一部のデバイスと Android バージョンにはコマンドにバグがあるため、テスト デバイス ファームにデバイスがあり、ファイルを取得できないために 0% のカバレッジを返します。そのため、ファイルを公開されている場所に保存する必要があります。

4

3 に答える 3

1

私たちにとって、それは AOSP アプリでした。Jack コンパイラを無効にしてテストおよびモジュール apk を生成していたため、この問題がさらに発生していました。私たちにとっては、Jackコンパイラが生成するために必要だったからcoverage.emです. しかし、エラーはあまり関係がありませんでした。そのため、これ以上進む手がかりがありませんでした。

したがって、修正は、jack コンパイラ サーバーを実行し、それを使用して生成された apk を取得することでした。

于 2019-02-24T10:50:30.043 に答える