Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
雅科科+;黄瓜+;Maven设置_Maven_Cucumber_Jacoco - Fatal编程技术网

雅科科+;黄瓜+;Maven设置

雅科科+;黄瓜+;Maven设置,maven,cucumber,jacoco,Maven,Cucumber,Jacoco,我之前已经搜索并使用了关于这个问题的答案,但我最终不确定是否可以继续,我想确保jacoco支持这一点。 我有一个多模块maven项目,我正在使用cucumber进行集成测试: <modules> <module>a</module> <module>b</module> <module>c</module> </modules> <profiles> <pr

我之前已经搜索并使用了关于这个问题的答案,但我最终不确定是否可以继续,我想确保jacoco支持这一点。 我有一个多模块maven项目,我正在使用cucumber进行集成测试:

<modules>
  <module>a</module>
  <module>b</module>
  <module>c</module>
</modules>

  <profiles>
    <profile>
        <id>env-local</id>
        <modules>
            <module>acceptance-tests</module>
        </modules>
    </profile>

A.
B
C
环境本地
验收试验
验收测试模块未在父pom的标记中定义,但验收测试pom.xml与其他模块具有相同的父定义

问题是所有集成测试都在验收测试中。我在这个模块中甚至没有src/main/java文件夹。我发现的大多数示例在每个模块中都有验收测试,覆盖范围是为属于该模块的代码生成的

在我的例子中,我需要生成一个包含所有使用的类的报告,即使它们来自另一个模块。我也设法做到了这一点,但我只能找到“第一级”的覆盖范围:如果一个类是从spb验收直接使用的,那么它将包含在报告中,但我找不到任何关于间接使用的类的信息

jacoco能实现这种覆盖吗


谢谢大家!

您的问题是Maven在构建项目时使用了深度优先的方法。也就是说,它将在进入下一个模块之前完成模块中的所有内容

结果是

  • 生产类被编译
  • 生产类被检测,因此可以测量代码覆盖率
  • 执行测试并记录使用情况
  • 收集使用结果
  • 重复下一个模块
这是它中断的地方,依赖于上一个模块的新模块将使用生成的依赖项。现在缓存在本地Maven缓存中的jar。jar中的类不会被检测,也不会记录它们的使用情况

我曾经用过的一个解决办法是

  • 编译所有代码
  • 在代码中插入指令
  • 执行所有测试
  • 合并并构建报告

几年前我写了一篇文章

问题是我没有重用jacoco-it.exec文件。当我有一个模块时,它可以工作,但是对于一个子模块,它进入模块目标,并且不能重用该文件

<modules>
  <module>a</module>
  <module>b</module>
  <module>c</module>
</modules>

A.
B
C
因此,它计算了没有模块本身的模块的覆盖率。 如果b有b1和b2,则使用此条目${project.basedir}/./target/jacoco-it.exec
对于sonar.jacoco.itReportPath,它在b的目标中查找文件,而不是主pom的目标。

在与一个多模块项目搏斗之后,我创建了一个显示单元、集成和测试。测试覆盖率通过Jacoco显示。 您可以在模块3黄瓜测试中看到

  • 多模块项目
  • 单元测试(通过mvn清洁安装)
  • 集成测试(通过mvn清洁安装-P集成测试)
  • Cumber测试(通过mvn清洁安装)-到演示单元/it测试
  • Jacoco-测试覆盖率(聚合数据文件和聚合报告)
  • FindBugs-代码质量
在这个项目中,有一个单独的jacoco聚合步骤来组合不同模块的jacoco结果。然后,您可以浏览index.html文件以查看所有模块的Jacoco结果

使用SonarQube时,单独模块的Jacoco结果聚合由SonarQube完成。因此,可以省略聚合步骤

我创造了一种不同的方式来解决这个问题

  • 在“构建”“插件管理”部分的父pom中定义故障保护和surefire插件的定义
  • 在使用这些插件的每个模块中,通过一个非常简单的groupid和artifactid引用插件。就这些
我将在周末看一看,看看是否可以应用此解决方案。谢谢你的回复,至少现在我知道发生了什么。