gpt4 book ai didi

java - 我如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:28 25 4
gpt4 key购买 nike

我有一个带有 Java 代码的多模块 Maven 设置。

我的单元测试,在一个模块中,在多个模块中练习代码。自然地,模块具有相互依赖性,所有相关模块中的代码在测试执行之前根据需要进行编译。

那么:我怎样才能得到一份关于整个代码库覆盖率的报告?


注意:我不是在问如何合并多个模块中测试的覆盖率结果。我在问如何使用来自多个模块的检测代码来覆盖单个模块中的测试。对前者感兴趣的可以引用these other questions ,以及 Crowne 对 Maven Dashboard 的建议和 Sonar .

我成功获得了全覆盖报告using pure Ant . [编辑:]我将 development-runtime 目录中的所有 jar 文件检测到一个临时目录中;将临时目录添加到类路径中;然后使用 batch-test 从 Ant 运行测试。

Ant 可以从 Maven 运行,但这里的挑战是无缝集成(即自动将所有类路径和源路径元素从 Maven 提供给 Ant),这就是为什么我没有为此目的使用 Maven 的工具。

还有other questions关于集成测试。但是,默认情况下,每个项目的报告默认仅报告相同项目中代码的覆盖率,而我的测试在多个项目中执行代码。

article in Spanish可能是相关的。这是另一个 Seam-specific article .


最佳答案

recent blog post by Thomas Sundberg包含一种通过使用 ant 进行 cobertura 调用而不是使用 maven cobertura 插件来部分解决问题的方法。

它依赖于以下使用专门的 pom.xml 和 build.xml 文件的基本方法:

从父 pom 上的典型 maven 编译开始,它将编译子模块中的所有类。

mvn clean compile # maven-compile-plugin called for compiling

然后检测所有模块类:

ant instrument # cobertura called for instrumentation

然后调用 maven-surefire-plugin 调用以使用检测类进行测试,并将 cobertura 作为测试依赖项

mvn test 

然后使用自定义报告调用从不同模块中提取所有结果:

ant report # cobertura called for reporting

ant build.xml 文件的关键元素是分别检测所有模块,然后在合并结果后报告所有模块。在他的示例中,每个模块都需要调用此函数:

<target name="instrumentAModule">
<property name="classes.dir" value="target/classes"/>
<cobertura-instrument todir="./${module}/${classes.dir}">
<fileset dir="./${module}/target/classes">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>

然后在测试完成后,报告阶段首先将来自所有不同目录的所有结果合并到一个新的 .ser 文件中(在他的示例中称为 sum.ser)

<target name="report" depends="merge">
<property name="src.dir" value="src/main/java/"/>
<cobertura-report datafile="sum.ser"
format="html"
destdir="./target/report">
<!-- Add all modules that should be included below -->
<!-- fileset dir="./MODULE_NAME_TO_REPLACE/${src.dir}"/ -->
<fileset dir="./product/${src.dir}"/>
</cobertura-report>
</target>

<target name="merge">
<cobertura-merge datafile="sum.ser">
<fileset dir=".">
<include name="**/cobertura.ser"/>
</fileset>
</cobertura-merge>
</target>

也许可以使用 antrun 插件将 ant 组件集成到 maven 中,但我对阶段/生命周期不够熟悉,不知道将不同的调用放在哪里。

这对我来说非常有用,因为我在我的 api 模块中编写抽象测试类,然后在我的 lib 模块中为它们提供一个实现。到目前为止,cobertura 和 emma 都无法处理此设计,因此我的代码覆盖率通常为 0 或个位数。

关于java - 我如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com