簡體   English   中英

當拋出異常和執行無異常時,如何使JUnit通過?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM