繁体   English   中英

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

[英]How do I control the order of execution of tests in Maven?

我需要按顺序运行测试。 我没有在任何地方找到充分记录的这一点。 我更愿意从命令行执行此操作。 就像是

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

我该怎么做呢?

您无法指定测试的运行顺序。

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

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

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

但是,进行相关测试并不是一个好主意。 单元测试必须是first

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

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

使用junit 4: -

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM