JUnit是否按顺序执行测试用例?

时间:2011-09-01 08:29:19

标签: java testing junit

在这个post中,我问了一个小问题,这是一个更大问题的一部分。由于我还没有得到答复,我在这里提出我的问题:

假设JUnit按顺序执行测试用例是否合理:测试用例在下一个测试用例开始之前结束。它是否在JUnit版本之间有所不同(我的优先级是在JUnit4上)?如果没有,是否有一种简单的方法可以强制JUnit按顺序执行测试?

谢谢

7 个答案:

答案 0 :(得分:27)

是的,默认情况下我相信它会按顺序运行测试。

JUnit 4.6引入了一个实验ParallelRunner来并行运行测试 - 我不知道它的当前状态。我希望并行性默认仍然是“选择加入”功能。 (从其他答案来看,看起来现在这里仍然存在,但形式略有不同 - 仍然选择加入。)

答案 1 :(得分:17)

自JUnit 4.7起支持并行执行测试。但据我所知,它永远不会自动完成,你需要特别配置它,例如像这里:http://java.dzone.com/articles/running-junit-tests-parallel

但不要忘记:

  

良好的自动化测试应该是独立的,孤立的和可重复的,这使它们成为同时运行的理想选择。

我不知道您为什么要问,但如果不符合上述标准,您可能需要考虑您的测试设计。

答案 2 :(得分:5)

强烈而合理的猜测:是的,JUnit默认是单线程的。

否则,如果某些测试并行运行,则会因为并发问题导致代码中断或失败而无法知道测试是否失败。

答案 3 :(得分:3)

是,

还要考虑@before@after,您可以使用代码恢复下次测试运行的状态。

答案 4 :(得分:1)

是。正如评论中某处所提到的,您应该仔细规划测试用例设置和拆卸(所有超类都会影响这些操作),以及测试设置和拆卸。

另外,在次要说明中,据我所知,JUnit并不保证测试用例的执行顺序(也就是说,除非它们在套件中,我猜)。这很重要,应该促使您在测试之间执行非常精确的清理和SUT状态恢复,并避免依赖于其他测试用例的结果的测试用例。你可能会说这是一种反模式:)。

答案 5 :(得分:0)

默认情况下,JUnit 使用确定性但不可预测的顺序 (MethodSorters.DEFAULT) 运行测试。

在 Junit 5 中:如果您想按顺序运行测试

  • 使用@TestMethodOrder 控制测试的执行顺序。
  • 然后使用@Order 注释强制测试按特定顺序运行。
  • 示例:

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
    private static StringBuilder output = new StringBuilder("");

    @Test
    @Order(1)
    public void firstTest() {
        output.append("a");
    }

    @Test
    @Order(2)
    public void secondTest() {
        output.append("b");
    }

    @Test
    @Order(3)
    public void thirdTest() {
        output.append("c");
    }

    @AfterAll
    public static void assertOutput() {
        assertEquals(output.toString(), "abc");
    }
}

答案 6 :(得分:-5)

根据我的经验,我可以说我们可以通过命名具有Test的方法名称来序列化类中的测试。 例如:

@Test

public ..... firstTest ()
{

}

@Test

public .... thirdTest()
{

}

@Test

public....secondTest()
{

}

订单是firstTest,thirdTest,secondTest