一個JUnit4的單元測試用例執行順序為:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一個測試方法的調用順序為:
@Before -> @Test -> @After;
代碼示例:
1 /** 2 * @author GrimMjx 3 */ 4 public class JunitTest { 5 6 @BeforeClass 7 public static void beforeClass(){ 8 System.out.println("BeforeClass"); 9 } 10 11 @Before 12 public void before(){ 13 System.out.println("Before"); 14 } 15 16 @Test 17 public void test(){ 18 System.out.println("Test"); 19 } 20 21 @Test 22 public void test2(){ 23 System.out.println("Test2"); 24 } 25 26 @After 27 public void after(){ 28 System.out.println("After"); 29 } 30 31 @AfterClass 32 public static void afterClass(){ 33 System.out.println("AfterClass"); 34 } 35 }
執行結果:
BeforeClass
Before
Test
After
Before
Test2
After
AfterClass
@BeforeClass、@AfterClass和@Before、@After的對比
1.@BeforeClass 和 @AfterClass 對於那些比較“昂貴”的資源的分配或者釋放來說是很有效的,因為他們只會在類中被執行一次。相比之下對於那些需要在每次運行之前都要初始化或者在運行之后 都需要被清理的資源來說使用@Before和@After同樣是一個比較明智的選擇;
2.如果類里面可以有多個注解過@Before和@After的方法,它們的執行順序是未知的;
3.@BeforeClass @AfterClass注解是junit提供的另外的兩個注解,必須設置在public 靜態方法之上,表示在class加載之前執行,這樣設置的方法只會執行一次,而@Before @After則會再每次test之前/之后執行;
4.在JUnit4中,如果測試類繼承了TestCase類,那么所有的Annotation都不會起作用。