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

2024-05-23

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

我的单元测试在其中一个模块中测试多个模块中的代码。当然,这些模块具有相互依赖性,并且在测试执行之前根据需要编译所有相关模块中的代码。

那么:如何获得整个代码库覆盖率的报告?


注意:我不是问如何组合多个模块中测试的覆盖率结果。我问如何使用多个模块中的检测代码来覆盖单个模块中的测试。对前者感兴趣的人可以参考these https://stackoverflow.com/questions/1420724/cobertura-on-maven-multi-module-project other https://stackoverflow.com/questions/3459988/how-to-calculate-code-coverage-in-hudson-using-emma-for-a-multi-module-maven-proj 问题 https://stackoverflow.com/questions/3768517/maven-cobertura-plugin-one-report-for-multimodule-project,以及皇冠的建议Maven 仪表板 http://maven.apache.org/maven-1.x/plugins/dashboard/ and Sonar http://www.sonarsource.org/.

我成功获得了完整的报道报告使用纯Ant http://cobertura.sourceforge.net/anttaskreference.html。 [编辑:] 我将开发运行时目录中的所有 jar 文件放入临时目录中;将临时目录添加到类路径前面;然后进行测试from Ant with 批量测试.

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

还有other https://stackoverflow.com/questions/2188192/running-integration-tests-with-cobertura-maven-plugin 问题 http://www.sonatype.com/people/2009/06/integration-tests-with-maven-part-2-test-coverage-reports/关于集成测试。但是,默认情况下,每个项目的报告仅报告代码中的覆盖率same项目,而我的测试在多个项目中执行代码。

This 西班牙语文章 http://foobar.lacoctelera.net/post/2008/09/15/uso-del-plugin-cobertura-dentro-un-proyecto-multi-modulo-en可能相关。这是另一个接缝专用文章 http://seamframework.org/Documentation/SeamTestCoverageWithCobertura.



This Thomas Sundberg 最近发表的博客文章 https://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/包含一种通过使用 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 或个位数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率? 的相关文章

随机推荐

  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 从使用heroku发送的邮件中删除“via sendgrid.me”

    我正在使用免费的 sendgrid 计划从 Heroku 上托管的 Rails 应用程序发送电子邮件 我使用以下组合进行设置这些说明 http devcenter heroku com articles sendgrid and 本教程 h
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • dyld:无法加载插入的库,但可以在模拟器和另一部 iPhone 上使用

    所以我在过去的几个小时里在我的应用程序上编码 在某个时候我决定在我的 iPhone 8 13 3 1 上启动我的应用程序而不是使用模拟器 13 3 它立即崩溃并出现以下错误 dyld warning could not load inser
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • 当目标小于 Android O 时,如何在 Android O 上创建快捷方式?

    背景 Android O 对快捷方式的工作方式进行了各种更改 https developer android com preview behavior changes html as https developer android com
  • 了解日期并使用 R 中的 ggplot2 绘制直方图

    主要问题 当尝试使用 ggplot2 制作直方图时 我无法理解为什么日期 标签和中断的处理无法像我在 R 中预期的那样工作 我在找 我的约会频率的直方图 刻度线位于匹配条下方的中心 日期标签在 Y b format 适当的限制 最小化网格空
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何指示 urwid 列表框的项目数多于当前显示的项目数?

    有没有办法向用户显示 urwid 列表框在显示部分上方 下方有其他项目 我正在考虑类似滚动条的东西 它可以显示条目的数量 或者列表框顶部 底部的单独栏 如果这个行为无法实现 有哪些方法可以实现这个通知 在我的研究过程中 我发现这个问题 ht
  • gdb 脚本:在选定的断点处执行命令

    我想在 gdb 脚本中预定义一些断点 并在这些断点处调用一些特殊命令 然后自动继续程序执行 因此 理想情况下 我想要一个如下所示的 gdb 脚本 b someFunction if breakpoint from above reached
  • 猫鼬中的数组过滤器

    将查询转换为节点 arrayfilter 在 mongoose 中工作的版本或者如何在节点应用程序中运行它们 db getCollection student update id ObjectId 5a377d62d21a3025a3c3a
  • 删除下拉链接并在导航栏菜单中显示其所有项目

    我正在使用 Twitter Bootstrap 及其响应式设计来实现顶部典型的 Twitter Bootstrap 导航栏菜单 在那里我有一些链接和一个下拉菜单 当我将浏览器大小调整为768px或者更少 它会转变为一种新的导航菜单 这一切开
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • 接下来无法加载 SWC 二进制文件

    当尝试使用 nextjs npm run dev 运行命令时显示错误 无法加载 SWC 二进制文件 请在此处查看更多信息 https nextjs org docs messages failed loading swc https nex
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问