【问题标题】:maven surefire plugin - run all tests sequentiallymaven surefire 插件 - 按顺序运行所有测试
【发布时间】:2018-12-25 09:24:35
【问题描述】:

由于某种原因,我无法让 maven surefire 插件按顺序运行我的测试。

我在测试中使用了 redis 模拟 (https://github.com/kstyrc/embedded-redis),效果很好,但我遇到了类似

的错误
Cannot run program "/tmp/1494421531552-0/redis-server-2.8.19" (in directory "/tmp/1494421531552-0"): error=26, Text file busy

我查了一下,发现它可能与并行运行的测试有关,并且它与这个 mock 有问题。

当前我的 maven 看起来像这样

           <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <trimStackTrace>false</trimStackTrace>
                <useFile>false</useFile>
                <reuseForks>false</reuseForks>
                <forkCount>1</forkCount>
            </configuration>

我想确保所有我的测试按顺序运行(一个接一个) - 这意味着每个类的每个测试方法都单独运行。

我怎样才能做到这一点?

【问题讨论】:

    标签: java maven unit-testing junit maven-surefire-plugin


    【解决方案1】:

    据我所知,确保单元测试顺序的唯一方法是按字母顺序排列:

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

    话虽如此,我认为您需要在每个测试中定义一个停止 redis 模拟的 @After 方法(实际上等到它停止),以便新测试可以在 @ 中启动 redis 模拟没有冲突的方法之前

    【讨论】:

    • 谢谢。有没有办法将特定 pom 下的所有类定义为 NotThreadSafe?我有一堆类都扩展了 BaseTest 类,我希望它们都按顺序执行。我可以在 pom.xml 中设置 NotThreadSafe 以影响其所有类吗?
    • 我认为 NotThreadSafe 注释只能在代码中使用,但是请查看此解决方案:*.com/questions/24811430/…
    最近更新 更多