如何在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