测试代码:
import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; public class Test { static{ System.out.println("静态初始化块"); } public Test(){ System.out.println("构造函数"); } @BeforeClass public static void beforeclass1(){ System.out.println("beforeclass1"); } @BeforeClass public static void beforeclass2(){ System.out.println("beforeclass2"); } @Before public void before1(){ System.out.println("before1"); } @Before public void before2(){ System.out.println("before2"); } @org.junit.Test public void test1(){ System.out.println("test1"); } @org.junit.Test public void test2(){ System.out.println("test2"); } @After public void after1(){ System.out.println("after1"); } @After public void after2(){ System.out.println("after2"); } @AfterClass public static void afterclass1(){ System.out.println("afterclass1"); } @AfterClass public static void afterclass2(){ System.out.println("afterclass2"); } }
运行该测试类,输出结果如下:
静态初始化块
beforeclass2
beforeclass1
构造函数
before2
before1
test1
after1
after2
构造函数
before2
before1
test2
after1
after2
afterclass1
afterclass2
通过输出结果,不难看出:
1、静态初始化块是最先执行的,并且只执行一次,不受@Test方法个数的影响。
2、接着执行 @BeforeClass 标记的方法,标记@BeforeClass的方法可以有多个,标记@BeforeClass的方法必须是静态方法。
3、每个@Test标记的方法执行前,都会新创建一个测试类的实例(执行构造函数)。
4、每个@Test标记的方法执行前,都会先执行一遍所有@before标记的方法。
5、每个@Test标记的方法执行后,都会执行一遍所有@After标记的方法。
6、所有@Test标记的方法都执行完毕后,最后执行@AfterClass标记的方法。