我正在使用 spock 單元測驗測驗一些 Java 代碼。在一個測驗用例中,我需要測驗一個類在拋出例外時是否正確運行。我模擬了引發例外的呼叫,然后測驗是否呼叫了該方法以及回傳的結果是否正確。
我使用的代碼相當長,所以我把它縮小到這個例子,這是一個有點毫無意義的測驗,但仍然說明了問題:
def "test if an exception is thrown on a mock"() {
given:
Object o = Mock() {
toString() >> {throw new UnsupportedOperationException("no message")}
}
when:
o.toString()
then:
thrown(UnsupportedOperationException)
}
這作業正常。從模擬中拋出例外并且測驗運行綠色。但是,如果我添加一個方法呼叫計數器,則不再拋出例外。如果我將then塊更改為
then:
1 * o.toString()
thrown(UnsupportedOperationException)
測驗失敗。我用除錯器檢查,結果toString()現在回傳 null 而不是拋出例外。為什么會發生這種情況,我能做些什么來解決它?
uj5u.com熱心網友回復:
您的案例在 spock 檔案中得到了很好的解釋。請參閱本節
為了快速修復,我建議
def "test if an exception is thrown on a mock"() {
given:
Object o = Mock() {
// Stubbing and Mock-verifying at the same time
1 * toString() >> {throw new UnsupportedOperationException("no message")}
}
when:
o.toString()
then:
thrown(UnsupportedOperationException)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450937.html
上一篇:請問(PDOException$e)和PDOException($e->getMessage(),(int)$e->getCode())是什么意思?
