当前位置: 首页 > 面试题库 >

Gradle jacoco覆盖报告包含多个子模块?

邓德厚
2023-03-14
问题内容

有谁知道如何为Java Jacoco报告配置一个gradle文件,其中包含多个gradle子模块的代码覆盖率?

我当前的方法仅显示当前子模块的代码覆盖率,而不显示兄弟子模块的代码覆盖率。

我有这个项目结构

- build.gradle (1)
- corelib/
    - build.gradle (2)
    - src/main/java/package/Core.java
- extlib/
    - build.gradle (3)
    - src/main/java/package/Ext.java
    - src/test/java/package/Integrationtest.java

当我执行gradlew :extlib:check :extlib:jacocoTestReportjunit-test“
Integrationtest.java”并执行代码生成报告时,该报告不包含Corelib类(如Core.java)的代码覆盖

结果应包括Ext.java和Core.java的代码覆盖率

我已经看过

  • https://docs.gradle.org/current/userguide/jacoco_plugin.html

但没有发现任何线索

这是gradle文件的内容

// root build.gradle (1)
// Top-level build file where you can add configuration options 
// common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
// build.gradle (2) subproject build file for corelib.
apply plugin: 'java'
apply plugin: 'jacoco'

dependencies {
}

jacocoTestReport {
    reports {
        xml.enabled true
        html.enabled true
    }
}
// build.gradle (3) subproject build file for extlib.
apply plugin: 'java'
apply plugin: 'jacoco'

dependencies {
    compile project(':corelib')
    testCompile 'junit:junit:4.11'

    // this does not compile
    // jacocoTestReport project(':pixymeta-core-lib')
}

jacocoTestReport {
    reports {
        xml.enabled true
        html.enabled true
    }
}

// workaround because android-studio does not make the test resources available
// see https://code.google.com/p/android/issues/detail?id=64887#c13
task copyTestResources(type: Copy) {
    from sourceSets.test.resources
    into sourceSets.test.output.classesDir
}
processTestResources.dependsOn copyTestResources

[更新2016-08-01]

感谢@Benjamin Muschko我也尝试了根gradle文件

// https://discuss.gradle.org/t/merge-jacoco-coverage-reports-for-multiproject-setups/12100/6
// https://docs.gradle.org/current/dsl/org.gradle.testing.jacoco.tasks.JacocoMerge.html
task jacocoMerge(type: JacocoMerge) {
   subprojects.each { subproject ->
      executionData subproject.tasks.withType(Test)
   }

}

但收到错误消息(使用gradle-2.14)

* What went wrong:
Some problems were found with the configuration of task ':jacocoMerge'.
> No value has been specified for property 'jacocoClasspath'.
> No value has been specified for property 'executionData'.
> No value has been specified for property 'destinationFile'.

还有gradle插件https://github.com/paveldudka/JacocoEverywhere,我在这里要求多子模块支持https://github.com/paveldudka/JacocoEverywhere/issues/16

[更新2016-08-01]我找到了一个基于https://github.com/palantir/gradle-jacoco-
coverage的可行
解决方案

见下面我自己的答案


问题答案:

最后,我找到了这个插件:https :
//github.com/palantir/gradle-jacoco-
coverage为我完成了这项工作:

根gradle.build

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // see https://jcenter.bintray.com/com/android/tools/build/gradle/
        classpath 'com.android.tools.build:gradle:2.1.0'
        // classpath 'com.android.tools.build:gradle:2.2.0-alpha1'

        // https://github.com/palantir/gradle-jacoco-coverage
        classpath 'com.palantir:jacoco-coverage:0.4.0'      
    }
}

// https://github.com/palantir/gradle-jacoco-coverage
apply plugin: 'com.palantir.jacoco-full-report'

所有具有

apply plugin: 'jacoco'

包含在报告中。



 类似资料:
  • https://docs.gradle.org/current/userguide/jacoco_plugin.html 并使用Gradle过滤JaCoCo覆盖报告 但没有发现任何线索 以下是gradle文件的内容 下面看我自己的答案

  • v2.0 Codecov报表 , 从2017-12-29后开始统计 测试覆盖率为 : , 可以从 https://codecov.io/gh/apache/dubbo 页面得到覆盖率报表 v1.0 基于 2.0.12 版本,统计于 2012-02-03

  • 当运行Gradle的Jacoco插件时,我在一组选定的类上得到零代码覆盖率报告。我已经确认测试这些类的所有单元测试都已成功运行。 非常有趣的是,EclEmma在Eclipse中生成了正确的代码覆盖率结果。我已经确认这两个工具使用的是相同版本的Jacoco。 我想知道这两种工具的区别是什么?我需要Gradle Jacoco插件的额外配置吗。 编辑:我的Gradle Jacoco输出显示“com类的执

  • 我使用maven-surefire-plugin内置功能使用了Flaky测试重新运行机制。此外,我还基于而不是添加了cucumber依赖项。它们都有自己版本的cucumber-java和cucumber-jvm依赖项。 现在,我需要另一个运行程序,其中包含以下代码(根据StackOverflow上的其他论坛和线程) 但我不需要有这个第二个跑者,因为重新运行机制工作绝对出色,只有一个跑者在顶部。ma

  • 这些答案中没有一个能够产生我想要的结果:如果一个类在堆栈更高的测试中被使用,比如DAOs使用的实体,那么这个类就会被覆盖,即使它没有被它自己的模块中的测试完全覆盖。 是否有一个明确的配置某处,以实现这一点,请?

  • 问题内容: 我已在帖子中搜索了我的问题的答案,但没有找到能解决我问题的任何东西。我正在尝试使用一个AlarmSettings类设置3种不同的警报。当我设置两个警报时,第二个警报优先于第一个警报,第一个永不熄灭。我认为这可能与我的未决意图有关……我真的是android新手,非常感谢您的帮助。这是我设置警报的代码: 问题答案: 将0属性更改为警报的ID,例如,您有三个警报, 用0,1,2重复上述代码。