如何控制Maven中测试的执行顺序?

时间:2012-08-22 14:46:26

标签: testing maven

我需要按顺序运行测试。我没有在任何地方找到这个充分记录。我更喜欢从命令行执行此操作。像

这样的东西
 mvn -Dtest=test1,test2,test3,test5 test

我该怎么做?

6 个答案:

答案 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)

如果您的单元测试需要按特定顺序运行,可能是因为您的测试设计不当,或者您的应用设计不当。你的单元测试应该是相互独立的。