surefire和failsafe插件可以故意随机化测试类的执行顺序吗?

时间:2014-01-30 15:58:43

标签: maven maven-surefire-plugin maven-failsafe-plugin

似乎surefire和failsafe插件按顺序执行测试类,而在类中定义的测试以不确定的顺序执行。

要发现依赖于订单的测试(我们认为是不好的测试),我们希望强制每次运行的订单不同。理想情况下,我们有一个机制来禁用随机化或重复顺序的种子编号(必须像旧的掌上操作系统模拟器有一个驱动一系列随机测试的种子编号)。

如果您知道如何做到这一点,请告诉我?如果没有,我想我可以在一个本地分叉中工作,然后提交它。

由于

彼得

4 个答案:

答案 0 :(得分:4)

其他一些答案链接到surefire maven文档页面,但与大多数maven文档一样,它没有提供如何在maven XML morass中实际指定设置的示例。以下是使用surefire插件的方法:

<properties>
  <surefire.plugin.version>2.16</surefire.plugin.version>
</properties>

<build>
 <plugins>
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${surefire.plugin.version}</version>
     <configuration>
       <runOrder>random</runOrder>
     </configuration>
   </plugin>
 </plugins>
</build>

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为这更多是您的单元测试框架的责任,而不是Surefire / Failsafe插件,它们只负责引导测试框架。

已经有一个关于如何使Junit测试以随机顺序运行的Stackoverflow问题(答案是使用自定义ClassRunner):

How can I make my JUnit tests run in random order?

如果您不想编写自己的实现,则此库提供实现:http://randomjunit.sourceforge.net/

答案 3 :(得分:0)

首先,在我看来,你在混合东西。 Maven-Surefire-PLugin负责运行单元测试,在这种情况下,执行顺序是独立的。 Maven-Failsafe-plugin负责完成不同的集成测试,因为集成测试可能依赖于没有问题的顺序。除了maven-surefire-plugin有一些可能影响执行顺序的顺序:

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder

这当然会受到您使用的测试框架的影响。在JUnit中,您只能以有限的方式影响订单。在TestNG中,它是一个完全不同的故事,因为TestNG能够定义依赖关系等。

Maven-Failsafe-Plugin具有影响执行顺序的相同功能。

http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#runOrder