Maven 2 用maven运行junits和cobertura

Maven 2 用maven运行junits和cobertura,maven-2,ant,junit,cobertura,Maven 2,Ant,Junit,Cobertura,在我们的项目中,我们使用maven运行junits和cobertura。我面临的问题是, junit测试用例运行两次,一次在jar创建过程之前,然后再次用于生成cobertura覆盖率报告。当使用ant运行cobertura和junits时,我们只运行一次junits,因为cobertura与junits一起运行。是否有一种方法可以使用maven配置上述案例。我知道我们可以使用“maven.test.skip”属性跳过junits。但是当我这样做时,我无法看到JUnitXML和html文件报告。

在我们的项目中,我们使用maven运行junits和cobertura。我面临的问题是,

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

  • 谢谢大家!

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

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

    之所以会发生这种情况,是因为报告执行需要执行测试,所以它可以创建报告。如果站点插件上有一个“仅站点”目标没有
    @requiresDependencyResolutionTest
    注释,那么它可以绑定到项目的
    准备包
    阶段,并且您的报告将在测试不运行两次的情况下生成

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

    您的第二个问题实际上是一个单独的问题,cna似乎在这里重新发布:只有当您的项目试图在cobertura之上构建某些东西时,作为依赖项(具有编译范围)才有帮助吗?这可能不是Ajay想要的。这是一个很好的观点。我有一次遇到的另一件事是,由于字节码的重新编写,如果您的代码大量使用反射,可能会导致问题。例如,如果您有一个从类中提取字段的实用程序,并且您的单元测试断言示例类有三个字段,当您在代码覆盖率下运行此测试时,它实际上会失败。更不用说不带插装的测试运行得更快了。@DavidValeri:您能提供一个指向您引用的讨论线程的链接吗(只需编辑我们的帖子)?Cobertura改变字节码的事实可以在他们的网站上引用。我看不出运行两次测试有什么好处。它清楚地表明了错误的测试、错误的工具或错误的配置。