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

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

例如:

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

我希望确保每次运行MyTest时在test2() test1()之前运行test1() ,但我找不到像@Test(order=xx)这样的注释。

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


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

我不确定是否有一种干净的方式来与JUnit做到这一点,据我所知,JUnit假定所有测试都可以以任意顺序执行。 从FAQ:

我如何使用测试夹具?

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

为什么这样? 那么,我认为让测试顺序依赖是一个作者不想提倡的做法。 测试应该是独立的,他们不应该被耦合,并且违反这将使事情难以维持,将打破单独(明显),运行等测试的能力

话虽如此,如果你真的想要朝这个方向前进,考虑使用TestNG,因为它支持以任意顺序在本地运行测试方法(以及诸如指定方法取决于方法组之类的事情)。 Cedric Beust解释了如何在testng中执行测试的顺序。


Junit 4.11附带@FixMethodOrder注释。 使用FixMethodOrder(MethodSorters.NAME_ASCENDING)升级junit版本并注释测试类,而不是使用自定义解决方案。 查看发行说明了解详细信息。

这是一个示例:

import org.junit.runners.MethodSorters;

import org.junit.FixMethodOrder;
import org.junit.Test;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void firstTest() {
        System.out.println("first");
    }

    @Test
    public void secondTest() {
        System.out.println("second");
    }
}

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

@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");
    }
}
链接地址: http://www.djcxy.com/p/61747.html

上一篇: How to run test methods in specific order in JUnit4?

下一篇: Is Inheritance in Struts2 Model