在我们相当大的项目(大约600个maven模块)中,我们决定尝试maven的并行构建功能。因此,我安装了maven 3.3并尝试运行单元测试。
我发现我们的单元测试有时会失败。如果我运行模块“单独”,它可以工作,当然,如果我们运行maven‘顺序’(没有-T选项),它也能工作。
因此,我认为这是因为有时测试会产生干扰,可能是一些静态代码或共享实例导致了这些失败。
我的问题是,运行项目单元测试的最佳方法是什么?我知道在每次运行的测试中生成JVM的选项,但是由于我们有数千个单元测试,我担心这样的构建将永远持续下去:)
AFAIK有三种可能的解决方案:
在深入研究这些解决方案并与我的经理交谈之前,如果有人能对其中一种/提供另一种解决方案进行评论,我将不胜感激。我只是不想重新发明轮子,希望能节省一些时间:)
提前谢谢
发布于 2015-11-18 21:13:23
在单独的JVM中运行每个测试类如何?(并可能在其他测试中重用分叉JVM)。
老实说,看起来你没给它一次机会。检查一下https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html文档
只是示例的副本粘贴:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
<systemPropertyVariables>
<databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
</systemPropertyVariables>
<workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
</configuration>
</plugin>顺便说一下,“万无一失”可以重新运行失败的测试:https://maven.apache.org/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html。我只是担心你不能设定一个门槛。
而且,分叉并不能使调试(例如,附加调试器)相当困难。
根据我的经验,并不是所有的安全设置都与分叉兼容,因此您可能需要一步一步地调整配置,以查看哪些是实际工作的,哪些是不工作的。
https://stackoverflow.com/questions/33785968
复制相似问题