多模块项目非“应用程序”模块中的仪表测试代码覆盖率

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

我的项目结构如下:

--应用程序

--module2 //库模块

--module3 //库模块

我正在为我的多模块 Android 项目编写仪器测试用例,并具有 jacoco 代码覆盖率。如果我从“app”模块执行仪器测试用例,则仅为“app”模块类生成代码覆盖率。

因此,为了获得“module2”和“module3”类的代码覆盖率;我已经在各个模块中编写了仪器测试用例。

当我在非应用程序模块中执行检测测试用例时,会出现问题,无法启动主要活动,应用程序在检测期间未启动并且测试用例失败。

根本原因是:

@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

@Rule 未在启动“MainActivity.class”的“module2”和“module3”中声明。由于一些循环依赖问题,我无法将“MainActiviy”导入这些模块。

错误:

java.lang.RuntimeException: No activities found. Did you forget to launch the activity by calling getActivity() or startActivitySync or similar?

如何解决这个问题?

注意:这个问题专门用于仪器测试,而不是单元测试(这已经在单元测试中处理)

类似问题

android code-coverage jacoco ui-testing android-instrumentation
2个回答
0
投票

我已经按照这个anwer并根据我的要求更改了gradle任务。 添加gradle任务以供参考。

 task jacocoUiTestReportAllModules(type: JacocoReport, dependsOn: 'createDebugCoverageReport') {
    group "Reports"
    description "Generate Jacoco Instrumented Tests coverage reports for all modules"
    reports {
        xml.enabled = true
        html.enabled = true
        html.destination file("${rootProject.buildDir}/coverage-report")
    }
    def javaClasses = []
    def kotlinClasses = []
    def javaSrc = []
    def kotlinSrc = []
    def execution = []
    rootProject.subprojects.each { proj ->
        javaClasses << fileTree(dir: "$proj.buildDir/intermediates/javac/debug", excludes: fileFilter)
        kotlinClasses << fileTree(dir: "$proj.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
        javaSrc << "$proj.projectDir/src/main/java"
        kotlinSrc << "$proj.projectDir/src/main/kotlin"
        execution << fileTree(dir: proj.buildDir, includes: [
                'outputs/code_coverage/debugAndroidTest/connected/**/*.ec'])
    }
    getSourceDirectories().setFrom(files([javaSrc, kotlinSrc]))
    getClassDirectories().setFrom(files([javaClasses, kotlinClasses]))
    getExecutionData().setFrom(execution)

    doLast() {
        print "file://${reports.html.destination}/index.html"

    }
}

运行

gradlew jacocoUiTestReportAllModules
后,完整覆盖的报告将出现在
[projRoot]/build/coverage-report
中。


0
投票

显示

原因:groovy.lang.MissingPropertyException:无法获取 org.gradle.testing.jacoco.tasks.JacocoReport 类型的任务“:app:jacocoUiTestReportAllModules”的未知属性“fileFilter”。 在 org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:85) 在org.gradle.internal.metaobject.ConfigureDelegate.getProperty(ConfigureDelegate.java:130)

© www.soinside.com 2019 - 2024. All rights reserved.