1 基本信息
摘要:描述了單元測試要避免的幾個問題,并給出幾個最佳實踐建議。
2 假成功的單元測試
1. 問題描述:
在testXXX方法中,看到有這樣的測試代碼:3. 解決方法:
public void testInvoke(){
try{
…
assertEquals(a,b);
}
catch(Exception e){
…
}
}
2. 問題分析:
如果運行過程中沒有出現異常,整個流程不會有任何問題,JUnit也認為整個測試正常通過。
但是一旦try中的某段代碼運行出錯,我們會發現由于在assertEquals被調用之前就已經跳到catch中,所以assertEquals并沒有被執行,而catch及之后的代碼中并沒有相應的assertEquals語句,因此JUnit認為這個testXXX方法對應的測試用例正常通過,我們被結果欺騙了。
將assertEquals語句移道try…catch之外,變成如下的代碼樣式:
public void testInvoke(){
Object a;
Object b;
try{
…
// assertEquals(a,b);
}
catch(Exception e){
…
}
assertEquals(a,b);
}
3 假失敗的單元測試
有的時候被測試方法在申明的時候有throws語句,那么單元測試代碼應該小心處理這個問題.
如果測試方法直接throws被測試方法所扔出的異常,則在被測試方法扔出這個異常的時候,該單元測試被認為是失敗;但是作為被測試方法來講,扔出該異?赡苁钦5奶幚磉壿,而不能被認定是代碼有錯誤. 稱這種情況為"假失敗"的單元測試.
4 最佳實踐
單元測試最好不要有try/catch這些內容,這些內容應該是正式代碼中處理的。
單元測試只要在故意測試異常時才應該用到try/catch,如需要在某個環境下是否拋出某個異常;而其它情況try/catch應該避免使用。
文章來源于領測軟件測試網 http://www.kjueaiud.com/