4

看起来,surefire 和 failsafe 插件按顺序执行测试类,而在类中定义的测试以未确定的顺序执行。

为了发现依赖顺序的测试(我们认为不好的测试),我们希望每次运行的顺序都不同。理想情况下,我们应该有一种机制来禁用随机化或重复顺序的种子编号(必须像旧的 palm OS 模拟器有一个种子编号来驱动一系列随机测试)。

让我知道你是否知道这样做的方法?如果没有,我想我可以在本地分叉中工作,然后提交。

谢谢

彼得

4

4 回答 4

7

其他一些答案链接到 surefire maven 文档页面,但与大多数 maven 文档一样,它没有提供如何在 maven XML 沼泽中实际指定设置的示例。这是使用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>
于 2015-03-13T13:04:17.517 回答
1

将 Surefire 的 runOrder 指定为“随机” http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder

于 2014-02-24T21:13:10.520 回答
0

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

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

如何让我的 JUnit 测试以随机顺序运行?

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

于 2014-01-30T16:02:30.063 回答
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

于 2014-01-30T16:28:35.380 回答