異常

JUnit 還可用於測試方法是否為給定輸入丟擲特定異常。

在這個例子中,如果布林格式(輸入)未被識別/未知,我們將測試以下方法是否真的丟擲異常:

public static boolean parseBoolean(@NonNull String raw) throws IllegalArgumentException{
    raw = raw.toLowerCase().trim();
    switch (raw) {
        case "t": case "yes": case "1": case "true":
            return true;
        case "f": case "no": case "0": case "false":
            return false;
        default:
            throw new IllegalArgumentException("Unknown boolean format: " + raw);
    }
}

通過將 expected 引數新增到 @Test 註釋,可以定義應該丟擲哪個異常。如果未發生此異常,則單元測試將失敗,如果確實丟擲異常,則單元測試將成功:

@Test(expected = IllegalArgumentException.class)
public void parseBoolean_parsesInvalidFormat_throwsException(){
    StringUtilities.parseBoolean("Hello JUnit");
}

這很好用,但它確實限制了方法中的單個測試用例。有時你可能希望在單個方法中測試多個案例。通常用於克服此限制的技術是使用 try-catch 塊和 Assert.fail() 方法:

@Test
public void parseBoolean_parsesInvalidFormats_throwsException(){
    try {
        StringUtilities.parseBoolean("Hello!");
        fail("Expected IllegalArgumentException");
    } catch(IllegalArgumentException e){
    }

    try {
        StringUtilities.parseBoolean("JUnit!");
        fail("Expected IllegalArgumentException");
    } catch(IllegalArgumentException e){
    }
}

注意:有些人認為在單元測試中測試多個案例是不好的做法。