2013-10-08 71 views
4

我有以下代碼:如何使用Hamcrest來測試異常?

def f(String s) { 
    assert !s?.contains('.') 
} 

什麼Hamcrest匹配器可以用來測試斷言?我知道我可以使用try/catch塊,但我更喜歡將測試的圈複雜性保持爲1。

+0

檢查我寫的匹配器,在我的答案中查看編輯。 – Renato

回答

4

編輯

如果你真的必須使用Hamcrest,你可以寫這樣的:

assertThat({ f('hi.ho') }, thrown(MyException)) 

您將需要ThrownMatcher.thrown(..)匹配,我只是爲了好玩寫道。

請參閱Gist here

但是在Groovy中,Hamcrest匹配器可以很容易地被更強大的結構所取代。

你可以,例如,使用GroovyTestCase要做到這一點:

shouldFail(MyException, { /* code expected to throw MyException*/ }) 

最後,如果你是認真的測試中使用斯波克:

http://code.google.com/p/spock/wiki/SpockBasics

when: 
f 'something.something' 

then: 
thrown(TypeOfException) 
+0

我知道Spock,但由於約束不能用於測試。 –

+0

我喜歡Hamcrest的答案,但是如果它是一個單獨的答案,會感覺更好,並對其進行檢查。 –

+0

我同意,但我不認爲可以兩次刪除答案或答案......所以我剛剛編輯了第一個實際答案,並且我對Spock的建議仍然持續,所以答案內容仍然相同。 – Renato