JUnit4中@Before、@After、@Test等注解的作用


轉載:https://blog.csdn.net/tn_java/article/details/53837024

JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的幾個annotation: 
@Before:初始化方法   對於每一個測試方法都要執行一次(注意與BeforeClass區別,后者是對於所有方法執行一次)
@After:釋放資源  對於每一個測試方法都要執行一次(注意與AfterClass區別,后者是對於所有方法執行一次)
@Test:測試方法,在這里可以測試期望異常和超時時間 
@Test(expected=ArithmeticException.class)檢查被測方法是否拋出ArithmeticException異常 
@Ignore:忽略的測試方法 
@BeforeClass:針對所有測試,只執行一次,且必須為static void 
@AfterClass:針對所有測試,只執行一次,且必須為static void 
一個JUnit4的單元測試用例執行順序為: 
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass; 
每一個測試方法的調用順序為: 

@Before -> @Test -> @After; 

 1 public class JUnit4Test {   
 2     @Before  
 3     public void before() {   
 4         System.out.println("@Before");   
 5     }   
 6 
 7     @Test  
 8          /**  
 9           *Mark your test cases with @Test annotations.   
10           *You don’t need to prefix your test cases with “test”.  
11           *tested class does not need to extend from “TestCase” class.  
12           */  
13     public void test() {   
14         System.out.println("@Test");   
15         assertEquals(5 + 5, 10);   
16     }   
17 
18     @Ignore  
19     @Test  
20     public void testIgnore() {   
21         System.out.println("@Ignore");   
22     }   
23 
24     @Test(timeout = 50)   
25     public void testTimeout() {   
26         System.out.println("@Test(timeout = 50)");   
27         assertEquals(5 + 5, 10);   
28     }   
29 
30     @Test(expected = ArithmeticException.class)   
31     public void testExpected() {   
32         System.out.println("@Test(expected = Exception.class)");   
33         throw new ArithmeticException();   
34     }   
35 
36     @After  
37     public void after() {   
38         System.out.println("@After");   
39     }   
40 
41     @BeforeClass  
42     public static void beforeClass() {   
43         System.out.println("@BeforeClass");   
44     };   
45 
46     @AfterClass  
47     public static void afterClass() {   
48         System.out.println("@AfterClass");   
49     };   
50 };  

輸出結果: 
@BeforeClass 
@Before 
@Test(timeout = 50) 
@After 
@Before 
@Test(expected = Exception.class) 
@After 
@Before 
@Test 
@After 
@AfterClass 

@BeforeClass and @AfterClass @Before and @After
在一個類中只可以出現一次

在一個類中可以出現多次,即可以在多個方法的聲明前加上這兩個Annotaion標簽,執行順序不確定

方法名不做限制 方法名不做限制
在類中只運行一次 在每個測試方法之前或者之后都會運行一次

@BeforeClass父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。
@AfterClass 父類中標識了該Annotation的方法將會在當前類中標識了該Annotation的方法之后執行

@Before父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。
 @After父類中標識了該Annotation的方法將會在當前類中標識了該Annotation的方法之后執行
必須聲明為public static 必須聲明為public 並且非static
所有標識為@AfterClass的方法都一定會被執行,即使在標識為@BeforeClass的方法拋出異常的的情況下也一樣會。 所有標識為@After 的方法都一定會被執行,即使在標識為 @Before 或者 @Test 的方法拋出異常的的情況下也一樣會。

 

@BeforeClass 和 @AfterClass 對於那些比較“昂貴”的資源的分配或者釋放來說是很有效的,因為他們只會在類中被執行一次。相比之下對於那些需要在每次運行之前都要初始化或者在運行之后 都需要被清理的資源來說使用@Before和@After同樣是一個比較明智的選擇。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM