使用 Orchestrator 时在 Android 中使用 Jacoco 实现代码覆盖率

问题描述 投票:0回答:1

我正在尝试从我们的测试套件获取覆盖率报告,该套件需要与 Android Test Orchestrator 一起运行。

有一个固定的问题引用了另一个固定的问题

按照他们的建议我添加了

testInstrumentationRunnerArguments coverageFilePath: '/data/local/tmp/codeCoverage'

但我仍然在接受

 java.io.IOException: No coverage data to process in directories [[buildDr]/outputs/code_coverage/stageTestDebugAndroidTest/connected]

我认为它可能与测试发行说明存档页面中的这一行相关

仅在“覆盖范围”和 'coverageFilePath' 参数已传递。

我尝试过添加

testInstrumentationRunnerArguments coverage: 'true'

这没有什么区别,我找不到任何关于实际应该通过什么的信息。

你知道我错过了什么吗?

指向工作示例的链接也非常好。

android android-espresso android-testing androidjunitrunner android-test-orchestrator
1个回答
0
投票

这似乎是通过一些新参数修复的,如本示例所示: https://github.com/android/testing-samples/tree/main/runner/AndroidTestOrchestratorWithTestCoverageSample

我只需要修改这个库:

coreVersion = "1.6.0-alpha05"
,除此之外它按原样工作。


我们需要添加协调器:

androidTestUtil "androidx.test:orchestrator:" + rootProject.orchestratorVersion
androidTestUtil "androidx.test.services:test-services:" + rootProject.testServicesVersion

启用跑步者上的

useTestStorageService
clearPackageData
标志:

testInstrumentationRunnerArguments clearPackageData: "true"
testInstrumentationRunnerArguments useTestStorageService: "true"

设置代码覆盖率和编排器的标志:

buildTypes {
    debug {
        testCoverageEnabled true
    }
}

testOptions {
    execution "ANDROIDX_TEST_ORCHESTRATOR"
}

最后,请确保您指向正确的

*.ec
文件,如果您使用的是自定义 JaCoCo 任务,则该任务不会显示在 GitHub 示例中。

include("outputs/code_coverage/debugAndroidTest/connected/*/*.ec")

如果仍然不起作用,某些库和版本可能需要调整,这些是对我有用的库和版本(其中大多数都按原样存在于存储库中):

ext {
    androidxAnnotationVersion = "1.2.0"
    guavaVersion = "30.1.1-android"
    coreVersion = "1.6.0-alpha05"
    extJUnitVersion = "1.2.0-alpha01"
    runnerVersion = "1.6.0-alpha03"
    rulesVersion = "1.6.0-alpha01"
    testServicesVersion = "1.5.0-alpha01"
    orchestratorVersion = "1.5.0-alpha01"
    espressoVersion = "3.6.0-alpha01"
    truthVersion = "1.1.3"
}
© www.soinside.com 2019 - 2024. All rights reserved.