看起来,surefire 和 failsafe 插件按顺序执行测试类,而在类中定义的测试以未确定的顺序执行。
为了发现依赖顺序的测试(我们认为不好的测试),我们希望每次运行的顺序都不同。理想情况下,我们应该有一种机制来禁用随机化或重复顺序的种子编号(必须像旧的 palm OS 模拟器有一个种子编号来驱动一系列随机测试)。
让我知道你是否知道这样做的方法?如果没有,我想我可以在本地分叉中工作,然后提交。
谢谢
彼得
看起来,surefire 和 failsafe 插件按顺序执行测试类,而在类中定义的测试以未确定的顺序执行。
为了发现依赖顺序的测试(我们认为不好的测试),我们希望每次运行的顺序都不同。理想情况下,我们应该有一种机制来禁用随机化或重复顺序的种子编号(必须像旧的 palm OS 模拟器有一个种子编号来驱动一系列随机测试)。
让我知道你是否知道这样做的方法?如果没有,我想我可以在本地分叉中工作,然后提交。
谢谢
彼得
其他一些答案链接到 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>
将 Surefire 的 runOrder 指定为“随机” http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder
我认为这更多的是你的单元测试框架的责任,而不是 Surefire/Failsafe 插件,它们只负责引导测试框架。
已经有一个关于如何让 Junit 测试以随机顺序运行的 Stackoverflow 问题(答案是使用自定义的 ClassRunner):
如果您不想自己编写,此库提供了一个实现:http ://randomjunit.sourceforge.net/
首先,在我看来,你正在混合东西。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