2015-08-29 98 views
0

我正在使用Apache Commons Validator驗證生成器模式中的輸入。Apache Commons Validator和JUnit

一旦建立()被調用的建設者,該變量使用的方法,如檢查:

Validate.notNull(oranges, "Oranges was not set."); 

在測試我的代碼,我可以看到,當我不設置橙子,我確實得到消息「橘子沒有設置」。但是,拋出的異常仍然是NullPointerException。

在我的單元測試,我想檢查驗證的使用和輸出消息,但顯然使用:無論驗證是否使用或消息設置

@Test(expected = NullPointerException.class) 

會通過。

有沒有一種方法可以檢查驗證器是否被使用並且消息是在JUnit中設置的?如果沒有,是否有一個圖書館可以讓我這樣做?

+0

是否使用NullPointerException有意或僅僅是來自Commons Validator代碼的副作用? – Brad

回答

0

你應該只檢查你的代碼的外部行爲。在你的情況下,這是:它會拋出一個NullPointerException與適當的消息。

測試異常有多種方法(請參閱JUnit Wiki)。您可以隨時使用JUnit的ExpectedException rule

public class YourTest { 
    @Rule 
    public final ExpectedException thrown = ExpectedException.none(); 

    @Test 
    public void test() { 
    ... 
    thrown.expect(NullPointerException.class); 
    thrown.expectMessage("Oranges was not set."); 
    builder.build(); 
    } 
} 

與Java 8,您可以使用由庫Fishbowl提供的方法exceptionThrownBy。它允許你使用Arrange-Act-Assert pattern

public class YourTest { 
    @Test 
    public void test() { 
    ... 
    Throwable exception = exceptionThrownBy(() -> builder.build()); 
    assertEquals(NullPointerException.class, exception.getClass()); 
    assertEquals("Oranges was not set.", exception.getMessage()); 
    } 
} 
相關問題