测试执行顺序
由于设计原因,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来,你多执行几次,就发现会有很大的随机性。
- 如果是默认方法,那么顺序是可以确定的,但是执行过程就是不可以预见的。