如何在JUnit4中按特定顺序运行测试方法?

2022-08-31 04:30:04

我想执行按特定顺序注释的测试方法。@Test

例如:

public class MyTest {
    @Test public void test1(){}
    @Test public void test2(){}
}

我想确保每次运行之前都运行,但是我找不到像.test1()test2()MyTest@Test(order=xx)

我认为这对JUnit来说是非常重要的功能,如果JUnit的作者不想要顺序功能,为什么?


答案 1

我认为这对JUnit来说是非常重要的功能,如果JUnit的作者不想要顺序功能,为什么?

我不确定有没有一种干净的方法来使用JUnit来做到这一点,据我所知,JUnit假设所有测试都可以按任意顺序执行。从常见问题解答中:

如何使用测试夹具?

(...)测试方法调用的顺序不能保证,因此 testOneItemCollection() 可能会在 testEmptyCollection() 之前执行。(...)

为什么会这样?好吧,我相信使测试顺序相关是作者不想推广的做法。测试应该是独立的,它们不应该是耦合的,违反这将使事情更难维护,会破坏单独运行测试的能力(显然),等等。

话虽如此,如果你真的想朝着这个方向发展,请考虑使用TestNG,因为它支持以任意顺序运行测试方法(以及诸如指定方法取决于方法组之类的事情)。Cedric Beust解释了如何按照testng中测试的执行顺序来做到这一点


答案 2

如果您删除了现有的 Junit 实例,并在构建路径中下载了 JUnit 4.11 或更高版本,则以下代码将按测试方法的名称顺序执行测试方法,并按升序排序:

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void testAcreate() {
        System.out.println("first");
    }
    @Test
    public void testBupdate() {
        System.out.println("second");
    }
    @Test
    public void testCdelete() {
        System.out.println("third");
    }
}

推荐