我需要按顺序运行测试。我没有在任何地方找到这个充分记录。我更喜欢从命令行执行此操作。像
这样的东西 mvn -Dtest=test1,test2,test3,test5 test
我该怎么做?
答案 0 :(得分:34)
您无法指定测试的运行顺序。
执行此操作的解决方法是将runOrder parameter设置为按字母顺序排列。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<runOrder>alphabetical</runOrder>
</configuration>
</plugin>
然后您需要重命名测试以获得预期的顺序。
然而,依赖测试并不是一个好主意。单元测试必须是fIrst。
答案 1 :(得分:5)
如果您确实需要测试的顺序,则应使用testng而不是JUnit,您可以在其中定义测试之间的依赖关系,并根据特定的测试顺序。我知道在实践中他们是独立范式不起作用的时候。
答案 2 :(得分:4)
有一个Maven Surefire插件,可让您指定test order。
如果您的测试需要按顺序运行,因为它们相互依赖,我强烈建议不要这样做。每个测试都应该是独立的,并且能够独立运行。如果每个测试都是独立的,那么它们运行的顺序并不重要。独立测试也意味着您可以重复运行单个测试,而无需重新运行整个测试链。这节省了大量时间。
答案 3 :(得分:3)
您可以创建一个运行所有测试的测试套件并运行它。
使用junit 4: -
@RunWith(Suite.class)
@Suite.SuiteClasses({Test1.class,
Test2.class,
Test3.class,
Test4.class,
Test5.class
})
public class TestSuite
{
}
这将以正确的顺序运行它们。
答案 4 :(得分:2)
surefire插件的runOrder
参数将有所帮助,但仅在按顺序执行这些类时才有帮助。在一个类(surefire-plugin 2.22.2,junit 5.6.1)中排序测试方法无济于事。要使用jUnit实现测试类中的顺序,请使用jUnit的功能,即通过 @TestMethodOrder(MethodOrderer.Alphanumeric.class)(jUnit 5)控制类中的测试顺序。
答案 5 :(得分:1)
如果您的单元测试需要按特定顺序运行,可能是因为您的测试设计不当,或者您的应用设计不当。你的单元测试应该是相互独立的。