[英]Exception - When the JVM runs out of memory, which exception will be thrown?
[英]How to make JUnit pass both when exception is thrown and when execution runs without exceptions?
我知道一個簡單的方法是這樣的:
try {
//perform something you expect no exceptions
} catch (Exception e) {
Assume.assumeTrue(e.getErrorMessage().equals("Expected Exception");
}
還有其他更優雅的方法可以使我的JUnit在拋出特定異常時和完全不拋出異常時都可以通過Exception.thrown傳遞嗎?
我相信單元測試應該有一個確定的結果,而不應該有多個結果。
您始終可以嘲笑可能影響測試結果的外部依賴關系。 單元測試的最佳實踐之一是測試必須是“可重復的”。
運行單元測試應該與其結果一致,也就是說,如果您在兩次運行之間沒有進行任何更改,則它總是返回相同的結果。
許多開發人員都遵循的一種實踐/規則是每個測試僅包含一個斷言。
因此,也許最好的解決方案是嘗試使您的測試“可重復”。
希望這會有所幫助,歡呼
是,
@Test(expected=ExceptionType.class)
public void runTest(){
// your code here
}
或者,如果您想進一步檢查Exception,請使用ExpectedException 。
@Rule ExpectedException exception= ExpectedException.none();
@Test
public void runTest(){
// your code here
exception.expect(NullPointerException.class);
exception.expectMessage("your expected Message");
}
編輯:
這兩個版本實際上都需要引發異常。 如果您想在兩種情況下都通過測試,可以編寫自己的Rule
。 但是,這樣的測試沒有多大意義。
簡而言之,您不會在同一測試中這樣做。
單元測試只能測試一件事,並且如果您再次運行它而不更改任何內容 ,則必須始終具有相同的結果 。 在您的情況下,它正在測試兩種不同的結果,因此,如果失敗,您將不知道出什么問題了。 是在處理異常的代碼部分還是沒有得到異常的部分中的錯誤? 甚至更糟的是,如果它通過了,則您僅測試了兩件事之一,而另一件事可能已損壞,您將無法發現!
您應該將其分成兩個測試。 對引發異常的情況進行一項測試。 您需要確保在此處確實引發了異常。
另一個測試應該用於沒有引發異常的情況。 您需要確保不會引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.