2013-08-30 41 views
1

我開始使用DrJava在Java中。我正在跟隨TDD進行學習。我創建了一個假設驗證某些數據和無效數據的方法,該方法假設拋出異常。如何測試DrJava中的異常?

它按預期拋出異常。但我不確定,如何編寫一個單元測試來預期異常。

在.net中我們有ExpectedException(typeof(exception))。有人能指點我DrJava的等效物嗎?

感謝

+0

你需要使用DrJava –

回答

2

如果您正在使用JUnit,你可以做

@Test(expected = ExpectedException.class) 
public void testMethod() { 
    ... 
} 

看一看的API瞭解更多詳情。

+0

而在舊版本的JUnit,你可以不喜歡'嘗試{DoSomething的();不合格(「預期的例外」)? ;} catch(ExpectedException e){}' –

+1

OP是從Java開始的,因此他不妨學習最先進的做法,因爲它們很快就會過時。 – adarshr

0

如果您只是想測試某個特定異常類型是否在您的測試方法內某處引發,那麼已經顯示的@Test(expected = MyExpectedException.class)就沒有問題。

對於更高級的異常測試,您可以使用@Rule,以便進一步優化您希望拋出異常的位置,或者添加有關拋出的異常對象的進一步測試(即,消息字符串等於一些期望值或者包含一些期望值:

class MyTest { 

    @Rule ExpectedException expected = ExpectedException.none(); 
    // above says that for the majority of tests, you *don't* expect an exception 

    @Test 
    public testSomeMethod() { 
    myInstance.doSomePreparationStuff(); 
    ... 
    // all exceptions thrown up to this point will cause the test to fail 

    expected.expect(MyExpectedClass.class); 
    // above changes the expectation from default of no-exception to the provided exception 

    expected.expectMessage("some expected value as substring of the exception's message"); 
    // furthermore, the message must contain the provided text 

    myInstance.doMethodThatThrowsException(); 
    // if test exits without meeting the above expectations, then the test will fail with the appropriate message 
    } 

}