Я пытаюсь определить место, где jacoco создаст файл покрытия для инструментальных тестов, работающих на реальных устройствах.
Из --debug
запуска задачи gradle я вижу этот журнал:
[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
ОК (1 тест)
Ошибка: не удалось создать покрытие emma.
Я здесь совершенно потерян. Любые идеи?
Общие сведения Почему мне нужно, чтобы он хранился в другом месте: существует ошибка с командой adb shell run-as
на некоторых устройствах и в версии Android, поэтому в моей ферме тестовых устройств есть устройства, которые возвращают 0% покрытия, поскольку файл нельзя тянуть. Поэтому мне нужно, чтобы файл хранился в общедоступном месте.