簡體   English   中英

在Java中測試try-catch塊

[英]Testing try-catch blocks in Java

有什么可行的方法可以測試下面的Java方法中的catch塊捕獲了哪個Exception ,而無需更改其當前實現。

public String methodToTest(String text) {
    try
    {
        if (text.contains("something")) {
            throw new CustomException();
        }

        final MyObj myObj = new MyObj(text); //this can throw a MyObjException

        return text;

    } catch (CustomException e) {
        return "An exception has been thrown";
    } catch (MyObjException e) {
        return "An exception has been thrown";
    } catch (Exception e) {
        return "An exception has been thrown";
    }
}

如果您的任務是出於測試目的將功能視為“黑匣子”,則唯一的選擇就是依賴其返回值,因為它會捕獲異常。

如果返回值在每種情況下都相同(如此處所示),則根本無法區分它們。

您測試功能的嘗試不應依賴於其實現的知識,也不應從實質上改變功能的運行方式。 因此,我認為這是不幸的答案。

您不應該測試該方法的實現,而應該測試對該方法的期望。 以下是您提供的方法的一些示例:

  • 您希望包含"something"內容"something"text收到"An exception has been thrown"

測試:

String result = obj.methodToTest("my_something_string");
assertEquals("An exception has been thrown", result);
  • 您希望輸入null text會收到"An exception has been thrown"

測試:

String result = obj.methodToTest(null);
assertEquals("An exception has been thrown", result);
  • 您希望對於MyObj無效的text收到"An exception has been thrown"

測試:

String result = obj.methodToTest("string_not_valid_for_my_obj");
assertEquals("An exception has been thrown", result);

以相同的方式測試其他預期方案。 不要測試實施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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