@Test
public void testA() throws Exception {
}
上面是一個很好的代碼風格?因爲允許測試引發異常,並且如果代碼拋出異常,Netbeans認爲這是一個成功的測試用例。測試應該失敗拋出異常
如果是,那麼我想讓測試失敗,如果它拋出任何異常,我該怎麼做?
@Test
public void testA() throws Exception {
}
上面是一個很好的代碼風格?因爲允許測試引發異常,並且如果代碼拋出異常,Netbeans認爲這是一個成功的測試用例。測試應該失敗拋出異常
如果是,那麼我想讓測試失敗,如果它拋出任何異常,我該怎麼做?
如果你想測試失敗你的代碼是完全合法如果任何例外發生。 Imho這是很好的風格,如果在測試代碼中可能會拋出一個檢查過的異常,但不應該發生。
如果你想在特定的行測試異常產生或希望驗證例外本身的東西,這種模式通常是更有益的:
@Test
public void testA() {
// Initialize
try {
// Except Exception here
Assert.fail("Exception not thrown");
} catch (IWantToCatchException ex) {
// Assert exception is correct
}
// other code
}
要在拋出異常時通過測試,您需要設置Test
註釋的預期元素。
@Test(expected=Exception.class)
否則如果引發異常,jUnit將會失敗測試,這可能適合您的情況。
由於JUnit的4.7存在測試的註解expected
部分:
@Test(expected=YourException.class)
有了這個測試成功只有在拋出異常。
因此,如果您離開expected
,則每當引發異常時測試都會失敗。
例外情況是您不知道會發生的罕見情況,但您採取預防措施。但在單元測試的情況下,如果你是放心的,這將引發某些異常然後測試這種方式,如:
@Test(expected = ArithmeticException.class)
public void testA() {
int i = 1/0;
}
你是什麼意思「成功」測試案例?如果JUnit測試引發異常,則默認情況下會失敗。 – chrylis
@chrylis不幸的是,它並沒有在我的情況下,我認爲可能是「拋出異常」是罪魁禍首。 –
發佈代碼;測試中的錯誤比JUnit中的錯誤更可能。 – chrylis