【问题标题】:How to generate the code coverage report using jacoco where source code and tests are in different projects?如何使用 jacoco 生成代码覆盖率报告,其中源代码和测试位于不同的项目中?
【发布时间】:2014-12-28 14:18:18
【问题描述】:

我在某个文件夹中有一个 maven java 项目(它有一些单元测试),并在另一个不同的项目(不同的目录)中测试相同的代码。源代码和测试共享同一个父 pom。现在我想使用 JaCoCo 生成代码覆盖率报告。

如何检测源?如何在检测代码上运行测试?以及如何整合得到结果报告?

假设项目 ABC 包含代码,项目 XYZ 包含测试用例。 注意:

  1. Project ABC 和 Project XYZ 是独立的项目
  2. ABC 和 XYZ 都包含多个子项目(需要集成所有内容)。

【问题讨论】:

    标签: maven testng code-coverage pom.xml jacoco


    【解决方案1】:

    我遇到了类似的问题。我通过更改jacoco报告路径的路径找到了解决方案:

    <sonar.surefire.reportsPath>${project.basedir}/../target/surefire-reports</sonar.surefire.reportsPath>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    

    我添加了这些属性并将 jacoco 插件配置为附加报告而不是通过以下方式覆盖它们:

    <configuration>
    <append>true</append>
    </configuration>
    

    这样 jacoco 将报告写入多模块项目的基本目录。声纳插件会找到这些并分析它们。

    【讨论】:

    • 请给我更多细节。
    • 关于什么的更多细节?
    【解决方案2】:

    在构建具有多个子模块的“参考应用程序”并尝试为子模块生成测试覆盖率并将它们推送到 sonarqube 时,我遇到了问题。我遇到的问题是,由于子模块相互引用,因此生成的 jacoco 报告被覆盖,我最终会得到单个模块的结果。这可能与上面发布的问题不同,但我确实通过在 gradle 中使用“追加”解决了它,所以只想展示如何做到这一点。

    在每个模块的 build.gradle 文件中,我有:

        testOptions {
            unitTests.returnDefaultValues = true
            unitTests.includeAndroidResources = true
            unitTests.all {
                jacoco {
                    append = true
                    includeNoLocationClasses = true
                }
                systemProperty 'robolectric.enabledSdks', '28'
            }
        }

    s

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多