我之前搜索过并使用过有关此问题的答案,但最后我不确定是否可以继续,我想确保jacoco支持此问题。 我有一个multimodule maven项目,我正在使用黄瓜进行集成测试:
<modules>
<module>a</module>
<module>b</module>
<module>c</module>
</modules>
<profiles>
<profile>
<id>env-local</id>
<modules>
<module>acceptance-tests</module>
</modules>
</profile>
验证测试模块未在父pom的标签中定义,但验收测试pom.xml与其余模块定义的父级相同。
问题是所有集成测试都在验收测试中。我在这个模块中甚至没有src / main / java文件夹。我发现的大多数示例都在每个模块中都进行了验收测试,并为属于该模块的代码生成了覆盖范围。
在我的情况下,我需要生成一个包含所有使用类的报告,即使它们来自另一个模块。我也设法做到这一点,但我只能找到第一级的覆盖范围&#39;如果一个类直接来自spb-acceptance,它包含在报告中,但我找不到任何有关间接使用的类的信息。
使用jacoco可以实现这种覆盖吗?
谢谢!
答案 0 :(得分:0)
你的问题是Maven在构建项目时使用了深度优先的方法。也就是说,它将完成模块中的所有内容,然后再继续下一个模块。
结果就是
这是它破坏的地方,依赖于前一个的新模块将使用生成的依赖项。现在缓存在本地Maven缓存中的jar。 jar中的类没有检测,也没有为它们记录用法。
我使用的解决方案是
几年前我写了blog post。
答案 1 :(得分:0)
问题是我没有重复使用jacoco-it.exec文件。当我有一个模块时,它工作,但是对于一个子模块,它在模块目标中,并且它无法重用该文件
<modules>
<module>a</module>
<module>b</module>
<module>c</module>
</modules>
因此它计算了自己没有模块的模块的覆盖范围。 如果b有b1和b2,则使用此条目$ {project.basedir} /../ target / jacoco-it.exec 对于sonar.jacoco.itReportPath,它正在寻找b目标中的文件,而不是主pom的目标。
答案 2 :(得分:0)
在与多模块项目挣扎之后,我创建了一个complete simple demo project显示单元,集成,黄瓜测试。测试覆盖范围通过Jacoco显示。 您可以在module3中看到Cucumber测试。
在这个项目中,有一个单独的jacoco-aggregate步骤来组合不同模块的Jacoco结果。然后,您可以浏览index.html文件以查看所有模块的Jacoco结果。
当您使用SonarQube时,SonarQube会完成单独模块的Jacoco结果的聚合。因此,您可以省略聚合步骤。
我创建another simple project以不同的方式解决问题。