使用 maven 运行 junits 和 cobertura

Posted

技术标签:

【中文标题】使用 maven 运行 junits 和 cobertura【英文标题】:running junits and cobertura with maven 【发布时间】:2010-10-18 11:51:22 【问题描述】:

在我们的项目中,我们。我面临的问题是,

    junit 测试用例运行两次,一次在 jar 创建过程之前,然后再次用于生成 cobertura 覆盖率报告。当与 ant 一起运行 cobertura 和 junits 时,我们只运行一次 junits,因为 cobertura 与 junits 一起运行。有没有办法用 maven 配置上述情况。我知道我们可以使用“maven.test.skip”属性来跳过junits。但是当我这样做时,我看不到 junit xml & html 文件报告。 另外,在 maven 中如何配置 junit 以批量或并行运行?

谢谢!

【问题讨论】:

你的第二个问题确实是一个单独的问题,cna似乎在这里转贴:***.com/questions/423627/… 【参考方案1】:

虽然我无法再找到确切的页面,但我最近阅读了一篇关于为什么认为运行两次测试是个好主意的讨论。引用的关键问题是 Cobertura 字节码更改对测试准确性的影响。在某些情况下,代码执行的时间可能很重要,字节码更改可能会导致在 JUnit 中失败的测试在仅在 Cobertura 中运行时通过,反之亦然。因此,建议允许测试执行两次。引用的大多数示例都围绕多线程行为,但我想可能还有其他情况是字节码更改可能会导致您的测试出现问题。以两种方式执行测试可以为您提供基准结果,并且如果 Cobertura 实际上正在改变测试成功,也可以减少让您陷入困境的机会。

【讨论】:

这是一个很好的观点。我曾经遇到的另一件事是,由于字节码重写,如果您的代码大量使用反射,可能会导致问题。例如,如果您有一个从类中提取字段的实用程序,并且您的单元测试断言示例类具有三个字段,那么当您以代码覆盖率运行它时,该测试实际上会失败。 更不用说没有仪器的测试运行得更快。 @DavidValeri:您能否提供您所指的讨论主题的链接(只需编辑我们的帖子)? Cobertura 改变字节码的事实可以参考他们的网站cobertura.sourceforge.net/introduction.html。 我看不出两次运行测试有什么好处。这清楚地表明了错误的测试、错误的工具或错误的配置。【参考方案2】:

尝试添加 cobertura 作为编译范围参考。并发布你的 pom 的相关部分。

【讨论】:

只有当你的项目试图在 cobertura 之上构建一些东西时,作为依赖项(具有编译范围)才会有帮助?这可能不是 Ajay 想要的。【参考方案3】:

发生这种情况是因为报告执行需要测试执行才能创建报告。如果站点插件上有一个没有@requiresDependencyResolution test 注释的“仅限站点”目标,则它可以绑定到项目的prepare-package 阶段,并且您的报告将在没有运行两次测试的情况下生成。

不幸的是,目前似乎没有这样的目标(请参阅我的question 关于这个主题)。 有关解决方法的详细信息,请参阅我对问题的回答。

【讨论】:

以上是关于使用 maven 运行 junits 和 cobertura的主要内容,如果未能解决你的问题,请参考以下文章

通过Maven一起运行jUnit和spock测试

Maven 和 JUnit 5:在一个类中运行单个测试

Eclipse/Maven:运行 JUnit 测试时未编译它们

JUnit:通过 eclipse 和 maven 测试运行。速度差别很大,为啥?

在 Maven 构建中并行运行 junit 测试?

使用 Maven 命令运行 Junit Suite