Notion Blog
技术分享1 分钟阅读

JUnit4 执行顺序

在JUnit4中,测试方法和生命周期方法的默认执行顺序如下:

@BeforeClass 注解的静态方法,在所有测试方法执行前执行一次,通常用于执行全局初始化。
@Before 注解的非静态方法,在每个测试方法执行前执行。
测试方法,按字母顺序执行。
@After 注解的非静态方法,在每个测试方法执行后执行。
@AfterClass 注解的静态方法,所有测试方法执行完成后只执行一次,通常用于全局清理。

例如:

@BeforeClass
public static void setUpBeforeClass() {}

@Before
public void setUp() {}

@Test
public void test1() {}

@Test
public void test2() {}

@After
public void tearDown() {}

@AfterClass
public static void tearDownAfterClass() {}

执行顺序为:

setUpBeforeClass
setUp
test1
tearDown
setUp
test2
tearDown
tearDownAfterClass

所以@BeforeClass和@AfterClass可以实现跨测试用例的初始化和清理;@Before和@After用来处理每个用例的前置条件设置和资源释放。

在JUnit中,如果一个测试类中有多个测试方法默认情况下这些测试方法的执行顺序是不确定的。

但是可以通过以下几种方式来控制多个测试方法的执行顺序:

使用@FixMethodOrder注解指定测试方法的执行顺序。
MethodSorters.JVM(按照JVM得到的方法顺序,也就是代码中定义的方法顺序)
MethodSorters.DEFAULT(默认的顺序)
MethodSorters.NAME_ASCENDING(按方法名字母顺序执行)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestClass {

  @Test
  public void test1() {}

  @Test
  public void test2() {}

}

@FixMethodOrder可以指定排序方式,例如按方法名字母顺序等。

给测试方法加上@Order注解手动指定顺序。
public class TestClass {

  @Order(1)
  @Test
  public void test1() {}

  @Order(2)
  @Test
  public void test2() {}

}
把测试方法组织成一个测试套件,在套件中指定测试方法的顺序。
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {

}

所以通过不同的方法,我们可以灵活地控制JUnit中多个测试方法的执行顺序。

有关使用上的问题,欢迎您在底部评论区留言,一起交流~

读者评论

评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。

0/1500

暂无评论,欢迎抢沙发。