1. 程式人生 > >Java單元測試工具:JUnit4(三)——JUnit詳解之執行流程及常用註解

Java單元測試工具:JUnit4(三)——JUnit詳解之執行流程及常用註解

(三)執行流程及常用註解

        這篇筆記記錄JUnit測試類執行時,類中方法的執行順序;以及JUnit中常用的註解。

1.JUnit的執行流程

1.1 新建測試類

        右鍵被測試類,新建一個測試類。彈出框中,首先改變測試類所在的程式碼目錄,然後勾選4個方法:

1.2 修改測試類程式碼

如下: [java]   view plain  
copy
  1. package jtzen9.util;  
  2. import org.junit.After;  
  3. import org.junit.AfterClass;  
  4. import org.junit.Before;  
  5. import org.junit.BeforeClass;  
  6. import org.junit.Test;  
  7.   
  8. public class JunitFlowTest {  
  9.   
  10.     @BeforeClass  
  11.     public static void setUpBeforeClass() throws Exception {  
  12.         System.out.println("this is setUpBeforeClass()..."
    );  
  13.     }  
  14.   
  15.     @AfterClass  
  16.     public static void tearDownAfterClass() throws Exception {  
  17.         System.out.println("this is tearDownAfterClass()...");  
  18.     }  
  19.   
  20.     @Before  
  21.     public void setUp() throws Exception {  
  22.         System.out.println("this is setUp()...");  
  23.     }  
  24.   
  25.     @After  
  26.     public void tearDown() throws Exception {  
  27.         System.out.println("this is tearDown()...");  
  28.     }  
  29.   
  30.     @Test  
  31.     public void test() {  
  32.         System.out.println("this is test()...");  
  33.     }  
  34.   
  35. }  

        控制檯輸出如下:

        在測試類中,增加一個test2()測試方法: [java]   view plain  copy
  1. ......  
  2. @Test  
  3. public void test2(){  
  4.     System.out.println("this is test2()...");  
  5. }  
  6. ......  
        再出執行,控制檯輸出結果如下:

1.3 總結說明

        ①@BeforeClass修飾的方法會在所有方法被呼叫前被執行,而且該方法是靜態的,所以當測試類被載入後接著就會執行它,而且在記憶體中它只會存在一份例項,它比較適合載入配置檔案,進行初始化等等
        ②@AfterClass所修飾的方法會在所有方法被呼叫後被執行,通常用來對資源的清理,如關閉資料庫的連線
        ③@Before和@After會在 每個測試方法的前後各執行一次。

2.JUnit常用註解

        * @Test:將一個普通的方法修飾成為一個測試方法
                           @Test(expected=XX.class)
                           @Test(timeout=毫秒)
        * @BeforeClass:它會在所有的方法執行前被執行,static修飾
        * @AfterClass:它會在所有的方法執行結束後被執行,static修飾
        * @Before:會在每一個測試方法被執行前執行一次
        * @After:會在每一個測試方法執行後被執行一次
        * @Ignore:所修飾的測試方法會被測試執行器忽略
        * @RunWith:可以更改測試執行器 org.junit.runner.Runner

2.1 @Test、@Ignore的測試

例子程式碼: [java]   view plain  copy
  1. package jtzen9.util;  
  2.   
  3. import static org.junit.Assert.assertEquals;  
  4.   
  5. import org.junit.Ignore;  
  6. import org.junit.Test;  
  7.   
  8. public class AnotationTest {  
  9.       
  10.     @Test(expected=ArithmeticException.class)  
  11.     public void testDivide() {  
  12.         assertEquals("除法有問題",3new Calculate().divide(60)); //將除數設定為0  
  13.     }  
  14.       
  15.     @Test(timeout=2000)  
  16.     public void testWhile() {  
  17.         while(true) {  
  18.             System.out.println("run forever...");  //一個死迴圈  
  19.         }  
  20.     }  
  21.       
  22.     @Test(timeout=3000)  
  23.     public void testReadFile(){  
  24.         try {  
  25.             Thread.sleep(2000);       //模擬讀檔案操作  
  26.         } catch (InterruptedException e) {  
  27.             e.printStackTrace();  
  28.         }  
  29.     }  
  30.       
  31.     @Ignore("...")  
  32.     @Test  
  33.     public void testIgnore() {  
  34.         System.out.println("會執行嗎?");    
  35.     }  
  36. }  
輸出結果:

說明:         ①testDivide()方法中,將除數設為0,本會丟擲Error,但設定了@Test(expected=ArithmeticException.class),說明我們預期它會丟擲一個算術異常,所以程式結果也符合我們的預期。         ②testWhile()方法是一個死迴圈,但設定了@Test(timeout=2000),即2秒之後,自動結束迴圈
        ③testReadFile()方法模擬讀取檔案操作,設定讀取超時時間為3秒,等於或大於測試時間則認為不成功,而程式睡眠了2秒,沒有超時。這裡表示用作一些效能的測試。         ④testIgnore()方法,因為使用的@Ignore註解,所以不會執行。

2.2 @RunWith

        關於@RunWith註解,下一篇筆記記錄。