1. 程式人生 > >JUnit4常見註解和使用方法記述

JUnit4常見註解和使用方法記述

一、JUnit4常見註解和使用方法說明

1、最常見的是@Test註解,@Test註解的方法會被當成測試用例的測試方法當測試用例執行時預設執行所有測試方法。

    @Test註解可以接收兩個引數。@Test(expected = NullPointerException.class,timeout = 5000)

    ① 第一個引數用來設定測試方法所丟擲的異常,如果測試方法執行時丟擲該異常或該異常的子類,則測試通過。

    ②第二個引數用來設定測試方法的執行時長,如果執行時間在設定的時間內執行完畢,則測試通過,該時間單位是毫秒。

2、經常用到的@RunWith()註解,@RunWith()註解修飾類,主要是用來宣告測試的執行器,預設是JUnit4執行器。我們可以自己建立執行器(具體建立JUnit自定義運器 https://blog.csdn.net/u012882327/article/details/72639366)。也可使用一些框架提供的執行器,例如@RunWith(SpringJUnit4ClassRunner.class),@RunWith(Parameterized.class)等,第一個是讓測試運行於Spring測試環境;第二個是進行引數化設定的。

3、其他的幾個相似的註解@BeforeClass、@Before、@After、@AfterClass.

    ① @BeforeClass註解修飾的方法(該方法要用static修飾)會在所有方法執行前被執行,且只執行一次,通常用來為後面測試方法的準備工作,如載入配置、進行資料庫的連線等。父類的@BeforeClass註解方法會在子類的@BeforeClass註解方法執行前執行。   

    ② @Before註解修飾的方法會在每個測試方法執行前執行一次,父類@Before修飾的方法會在子類@Before修飾的方法執行前 執行

    ③ @After註解修飾的方法會在每個測試方法執行後執行一次,父類@After修飾的方法會在子類@After修飾的方法執行後執行。

    ④ @AfterClass註解修飾的方法(該方法要用static修飾)會在所有方法執行結束後執行一次,且也只執行一次,通常用來對資源            進行釋放,比如資料庫連線的關閉等,無論測試用例裡的其他方法有沒有丟擲異常,該方法最終都會被執行。而且父類中           的被@AfterClass註解方法修飾的方法會在子類的@AfterClass註解修飾的方法執行之後才會被執行。   

4、@Ignore註解修飾的測試類或測試方法會被忽略執行。JUnit執行結果中會報告被忽略的測試數。

5、@Rule和ClassRule註解,它們讓我們可以擴充套件JUnit的功能,靈活改變測試方法的行為。JUnit中用@Rule和@ClassRule兩    個註解來實現Rule擴充套件,這兩個註解需要放在實現了TestRule藉口的成員變數(@Rule)或者靜態變數(@ClassRule)上。      @Rule和@ClassRule的不同點是,@Rule是方法級別的,每個測試方法執行時都會呼叫被註解的Rule,@ClassRule是類級      別的,在 執行一個測試類的時候只會呼叫一次被註解的Rule。具體如何利用Rule擴充套件JUnit。請閱讀另一位博主的文章,寫的      很詳細 ( https://blog.csdn.net/u013001763/article/details/80256892

6、@FixMethodOrder 是為測試方法指定執行順序的註解,測試方法的執行順序可通過對測試方法添加註解                 @FixMethodOrder(value)來指定,其中value 為執行順序 。

    value的幾種可選值:

   ① MethodSorters.DEFAULT **(預設) 


         預設順序由方法名hashcode值來決定,如果hash值大小一致,則按名字的字典順序確定。由於hashcode的生成和作業系統相關(以native修飾),所以對於不同作業系統,可能會出現不一樣的執行順序,在某一操 作系統上,多次執行的順序不變 。

  ②MethodSorters.NAME_ASCENDING (推薦) 


        按方法名稱的進行排序,由於是按字元的字典順序,所以以這種方式指定執行順序會始終保持一致;不過這種方式需要對測試方法有一定的命名規則,如 測試方法均以testNNN開頭(NNN表示測試方法序列號 001-999) 。

  ③ MethodSorters.JVM  


        按JVM返回的方法名的順序執行,此種方式下測試方法的執行順序是不可預測的,即每次執行的順序可能都不一樣(JDK7裡尤其如此)。

 

    有不對的或者不完善的地方請大家指出,一同改進。