文档章节

深入探索:单元测试之测试执行顺序

灯-塔
 灯-塔
发布于 2017/09/10 21:57
字数 699
阅读 111
收藏 0

测试执行顺序

由于设计原因,JUnit不会特别指定测试方法调用的执行顺序。到目前为止,这些方法只是按照反射API返回的顺序调用的。然而,使用JVM 的指令顺序返回是一种不太明智的做法。因为JVM平台也是没有指定任何特定的顺序,其实JDK 返回或多或少是有点随机性的。当然,一个好的测试方法是不会假设有任何的顺序的,但是,有些时候,我们对业务测试会有这样的需求的,不能随机而来。毕竟,可预见的故障比某些平台上的随机故障要好,随机意味着故障将有很大的不确定和难排查性。 从JUnit4.11 开始,JUnit将默认使用一个确定性的,但不可预测的顺序。(MethodSorters.DEFAULT), 改变测试方法的执行顺序,只需要用**@FixMethodOrder** 注解到你的测试类中,以及一个可用的测试方法排序方式就好, 如:

  • @FixMethodOrder(MethodSorters.JVM) :这样就是按照JVM返回的顺序留下测试方法。此Order可能因运行而异(机器不同可能有差异)
  • **@FixMethodOrder(MethodSorters.NAME_ASCENDING) ** :按各种测试方法的方法的名称,在字典序(按测试方法的字母来)。

举例

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

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestMethodOrder {

    @Test
    public void testA() {
        System.out.println("first");
    }
    @Test
    public void testB() {
        System.out.println("second");
    }
    @Test
    public void testC() {
        System.out.println("third");
    }
}

执行结果:

first
second
third
  • 无论我把A B C 这三个方法如何打乱,都是这个结果,按字母升序来执行。
  • 如果是按JVM来,你多执行几次,就发现会有很大的随机性。
  • 如果是默认方法,那