可是,這種 Fixture 設置方式還是引來了批評,因為它效率低下,特別是在設置 Fixture 非常耗時的情況下(例如設置數據庫鏈接)。而且對于不會發生變化的測試環境或者測試數據來說,是不會影響到測試方法的執行結果的,也就沒有必要針對每一個測試方法重新設置一次 Fixture。因此在 JUnit 4 中引入了類級別的 Fixture 設置方法,編寫規范如下:
1.
使用注解 org,junit.BeforeClass 修飾用于初始化 Fixture 的方法。
2.
使用注解 org.junit.AfterClass 修飾用于注銷 Fixture 的方法。
3.
保證這兩種方法都使用 public static void 修飾,而且不能帶有任何參數。
類級別的 Fixture 僅會在測試類中所有測試方法執行之前執行初始化,并在全部測試方法測試完畢之后執行注銷方法(圖6)。代碼范本如下:
//類級別Fixture初始化方法 @BeforeClass public static void dbInit(){……} //類級別Fixture注銷方法 @AfterClass public static void dbClose(){……}
圖6 類級別 Fixture 執行示意圖
圖6 類級別 Fixture 執行示意圖
異常以及時間測試
注解 org.junit.Test 中有兩個非常有用的參數:expected 和 timeout。參數 expected 代表測試方法期望拋出指定的異常,如果運行測試并沒有拋出這個異常,則 JUnit 會認為這個測試沒有通過。這為驗證被測試方法在錯誤的情況下是否會拋出預定的異常提供了便利。舉例來說,方法 supportDBChecker 用于檢查用戶使用的數據庫版本是否在系統的支持的范圍之內,如果用戶使用了不被支持的數據庫版本,則會拋出運行時異常 UnsupportedDBVersionException。測試方法 supportDBChecker 在數據庫版本不支持時是否會拋出指定異常的單元測試方法大體如下:
@Test(expected=UnsupportedDBVersionException.class) public void unsupportedDBCheck(){ …… }
注解 org.junit.Test 的另一個參數 timeout,指定被測試方法被允許運行的最長時間應該是多少,如果測試方法運行時間超過了指定的毫秒數,則JUnit認為測試失敗。這個參數對于性能測試有一定的幫助。例如,如果解析一份自定義的 XML 文檔花費了多于 1 秒的時間,就需要重新考慮 XML 結構的設計,那單元測試方法可以這樣來寫:
@Test(timeout=1000) public void selfXMLReader(){ …… }
忽略測試方法
文章來源于領測軟件測試網 http://www.kjueaiud.com/