我正在使用JUnit 4.4和Maven,并且我有大量长时间运行的集成测试.
在并行化测试套件时,有一些解决方案允许我在一个测试类中并行运行每个测试方法.但所有这些都要求我以某种方式改变测试.
我真的认为在X线程中并行运行X个不同的测试类是一个更清晰的解决方案.我有数百个测试,所以我并不真正关心线程化个别测试类.
有没有办法做到这一点?
我正在将一些项目从一个ant构建迁移到一个maven.构建服务器是,并将保留,Hudson.
由于测试运行并记录了两次问题,我在使用cobertura在哈德森录制代码覆盖时遇到了麻烦.
该项目是多模块的,尽管不是必需的,但是具有代码覆盖率数据的聚合输出将是很好的.
总而言之,我正在寻找的解决方案必须:
解决方案可以基于Cobertura,或Emma,或任何其他Java代码覆盖工具.
更新:使用Emma运行测试仍然会复制结果并且没有merge功能,因此它不适用于多模块构建.
我把surefire和cobertura插件放在我的pom.xml,但我无法配置他们工作正常.或者cobertura不运行或测试执行两次.
那么,我怎么能配置它们一起运行的插件呢?
如果我以这种方式配置,cobertura不会运行:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我以这种方式配置,测试将执行两次:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</plugin>
Run Code Online (Sandbox Code Playgroud) 我正在运行这样的maven:
mvn clean cobertura:cobertura package
Run Code Online (Sandbox Code Playgroud)
我注意到我的单元测试运行了两次(从而使我的构建时间加倍).有没有办法在不运行测试两次的情况下运行cobertura并在同一命令中生成包?
在CI服务器上运行Maven构建时,我会生成站点以发布文档和报告,并将工件部署到快照存储库以供其他项目使用.为此,我执行以下目标:
mvn clean site deploy
Run Code Online (Sandbox Code Playgroud)
这意味着单元测试运行两次,一次用于站点生命周期,一次用于部署生命周期.如果我将站点目标配置为绑定到标准生命周期,则测试仍然运行两次,运行站点目标始终会导致测试因为@requiresDependencyResolution测试注释而运行.如果您只是创建站点,这很好,但在部署的上下文中,它大大增加了构建时间,没有任何好处.
我有一个解决方法,涉及将SiteMojo(和所需的父项)复制到新插件并从副本中删除@requiresDependencyResolution测试注释.
这个修改过的mojo会生成报告,而不会强迫测试再次运行,但我更喜欢不涉及任何网站插件黑客攻击的解决方案.有没有办法抑制requiresDependencyResolution注释?