当前位置: 首页 > 知识库问答 >
问题:

插装测试有可能为库模块创建覆盖率吗?

李洋
2023-03-14

我正在对正在开发的应用程序进行模块化,自从将仪器测试拆分为应用程序模块以来,我的覆盖率下降了20%以上。

该应用程序被拆分为应用程序核心自定义,其中核心是Android库,其他2个模块是应用程序。该应用程序的大多数功能将存在于核心中,目前主要通过现在驻留在应用程序中的检测测试进行测试

有没有办法让应用程序模块中的检测测试生成包含库模块源的覆盖率报告?

我在这里看了这个问题,它与我的困境有很大的相似之处,但这似乎已经过时了,因为发布NonDefault已被弃用,并且什么都不做,因为库现在发布所有变体

我正在为这次公关努力

由于覆盖率下降,很难完成模块化,我预计模块化后覆盖率将保持不变。

编辑:我在这里创建了一个重现项目

共有3个答案

充小云
2023-03-14

不。

只需将检测测试添加到具有受测代码的模块中即可。

由于这个SO答案,我错误地认为仪器测试无法在库项目上运行,因此我建议进行编辑以反映最新的文档。

编辑:我后来找到了一个解决方案,但老实说,它可能不应该被使用,这是您应该走的路。仪器测试可能一开始就不应该用于覆盖,除非您被遗留问题所困扰,否则不要使用此页上提供的解决方案。

黎腾
2023-03-14

参见JacocoMerge任务,它可以将多个jacoco执行文件合并成一个文件。然后,您可以从合并的exec文件中生成一个JacocoReport

吴凯泽
2023-03-14

最终的答案来自这里,所以所有的信贷给他们。在这里张贴文件的内容,供任何人在未来查看

apply plugin: 'jacoco'

jacoco {
    toolVersion = "$jacocoVersion"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

    group "Reporting"
    description "Generate Jacoco coverage reports."

    reports {
        xml.enabled = true
        html.enabled = true
        html.destination file("${rootProject.buildDir}/coverage-report")
    }

    def javaClasses = []
    def kotlinClasses = []
    def javaSrc = []
    def kotlinSrc = []
    def execution = []

    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']

    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: ['jacoco/testDebugUnitTest.exec',
                           'outputs/code_coverage/debugAndroidTest/connected/**/*.ec'])
    }

    sourceDirectories = files([javaSrc, kotlinSrc])
    classDirectories = files([javaClasses, kotlinClasses])

    print execution

    executionData = files(execution)

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

FileFilter可能需要对现代Android应用程序进行一些改进,例如Dagger/ViewBinding。

我在我的< code>app/build.gradle中应用了这一点,在运行< code > grad Lew jacocoTestReport 后,完整覆盖的报告出现在< code >[projRoot]/build/coverage-report 中。

重现项目已使用解决方案进行了更新。

 类似资料:
  • 我继承了一个Android项目来设置代码覆盖率。我没有为Android做太多事情,而且几乎没有什么成绩,我开始寻找一个有用的教程。令人惊讶的是,前几个教程非常有帮助,我能够包含jaco gradle插件并启用代码覆盖率。使用詹金斯,我甚至生成了一份报道报告。到目前为止,一切看起来都很好。 然而,当我看到这份报告时,我闻到了一些可疑的味道。测试与覆盖率的比率似乎太小了。进一步调查发现了罪魁祸首。 测

  • 11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法

  • 考虑一个maven实用工具模块(模块1),它定义了一个抽象类:AbstractFoo.java。在测试资源下,编写了所述类的模型:foomockup.java。还编写了一个测试类:AbstractFootest.java。 现在考虑第二个模块(模块2),它包含一个使用AbstractFoo的类,并声明测试用例:bar.java和bartest.java。java在创建Bar实例的同时创建FooMo

  • 问题内容: 在我正在从事的项目中,我们有通过Selenium编写的功能测试。该应用程序随每个功能发行版进行功能更改。 有没有一种工具/机制可以跟踪自动化功能测试中的差距,以便至少手动测试人员可以关注这些领域? 注意:我们并未执行FTDD,因此即使我们确保较高的单元测试覆盖率,功能测试覆盖率也可能会很差。我们使用NCover检查单元测试范围。 问题答案: 据我所知,至少有两个(商业但便宜)的工具可让

  • 我有这样的项目结构: 模块应用程序 模块-登录 模块注册 问题:我有上面喜欢Android项目的结构,能够生成jaco代码覆盖率报告,并且可以用于声纳仪表板。我面临的espresso测试问题,它只显示模块应用程序的代码覆盖率,而不显示其他模块的代码覆盖率。Espresso测试正在运行用例流,如注册,然后从其他两个模块登录和调用类,但其他两个模块的覆盖率始终为0%。 < li >我想了解espres

  • 我有一个maven多模块项目。 所有测试都在称为tests/的单个模块中,所有代码都在单独的模块中。 有没有办法让我得到代码覆盖率?