2013-12-20 194 views
-1
@Test 
    public void testA() throws Exception { 

} 

上面是一個很好的代碼風格?因爲允許測試引發異常,並且如果代碼拋出異常,Netbeans認爲這是一個成功的測試用例。測試應該失敗拋出異常

如果是,那麼我想讓測試失敗,如果它拋出任何異常,我該怎麼做?

+1

你是什麼意思「成功」測試案例?如果JUnit測試引發異常,則默認情況下會失敗。 – chrylis

+0

@chrylis不幸的是,它並沒有在我的情況下,我認爲可能是「拋出異常」是罪魁禍首。 –

+0

發佈代碼;測試中的錯誤比JUnit中的錯誤更可能。 – chrylis

回答

3

如果你想測試失敗你的代碼是完全合法如果任何例外發生。 Imho這是很好的風格,如果在測試代碼中可能會拋出一個檢查過的異常,但不應該發生。


如果你想在特定的行測試異常產生或希望驗證例外本身的東西,這種模式通常是更有益的:

@Test 
public void testA() { 
    // Initialize 
    try { 
     // Except Exception here 
     Assert.fail("Exception not thrown"); 
    } catch (IWantToCatchException ex) { 
     // Assert exception is correct 
    } 
    // other code 
} 
3

要在拋出異常時通過測試,您需要設置Test註釋的預期元素。

@Test(expected=Exception.class) 

否則如果引發異常,jUnit將會失敗測試,​​這可能適合您的情況。

1

由於JUnit的4.7存在測試的註解expected部分:

@Test(expected=YourException.class) 

有了這個測試成功只有在拋出異常。

因此,如果您離開expected,則每當引發異常時測試都會失敗。

0

例外情況是您不知道會發生的罕見情況,但您採取預防措施。但在單元測試的情況下,如果你是放心的,這將引發某些異常然後測試這種方式,如:

@Test(expected = ArithmeticException.class) 
public void testA() { 
    int i = 1/0; 
}