22

我需要按顺序运行测试。我在任何地方都找不到充分的记录。我宁愿从命令行执行此操作。就像是

 mvn -Dtest=test1,test2,test3,test5 test

我该怎么做呢?

4

6 回答 6

41

您不能指定测试的运行顺序。

解决方法是将runOrder 参数设置为按字母顺序排列。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <runOrder>alphabetical</runOrder>
    </configuration>
</plugin>

然后你需要重命名你的测试以获得预期的顺序。

但是,进行依赖测试并不是一个好主意。单元测试必须是第一个

于 2012-08-22T15:09:31.720 回答
6

您可以创建一个测试套件来运行所有测试并运行它。

使用junit 4:-

@RunWith(Suite.class)
@Suite.SuiteClasses({Test1.class,
                     Test2.class,
                     Test3.class,
                     Test4.class,
                     Test5.class
})
public class TestSuite
{
}

这将以正确的顺序运行它们。

于 2015-03-26T13:26:07.677 回答
5

如果您确实需要测试顺序,那么您应该使用testng而不是 JUnit,您可以在其中定义测试之间的依赖关系并基于特定的测试顺序。我知道在实践中,独立范式不起作用的时代。

于 2012-08-25T15:41:09.540 回答
3

有一个 Maven Surefire插件,允许您指定测试顺序

如果您的测试需要按顺序运行,因为它们相互依赖,我强烈建议您不要这样做。每个测试都应该是独立的并且能够独立运行。如果每个测试都是独立的,那么它们运行的​​顺序无关紧要。拥有独立的测试还意味着您可以重复运行单个测试,而无需重新运行整个测试链。这是一个巨大的时间节省。

于 2012-08-22T15:32:51.383 回答
3

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

于 2012-08-22T15:40:22.850 回答
3

surefire-plugin的runOrder参数会有所帮助,但只有按顺序执行类时才会有所帮助。在一个类中排序测试方法没有帮助(surefire-plugin 2.22.2,junit 5.6.1)。要使用 jUnit 实现测试类中的顺序,请使用 jUnit 通过@TestMethodOrder(MethodOrderer.Alphanumeric.class) (jUnit 5) 控制类中测试顺序的功能。

于 2020-04-08T11:19:43.723 回答