2011-07-19 56 views
0

我正在編寫一個Grails服務類的unit tests。服務類使用多個域類。使用mockDomain方法爲域類創建模擬就像魅力一樣。即使是測試域對象是否可以正確保存的代碼路徑(域驗證)也可以輕鬆編寫。但是,在我的代碼中,我還用一個處理異常情況的try/catch塊封裝了域對象操作。有沒有辦法模擬域操作引發異常?這可以很容易地用模擬框架,如MockitothenThrow)或EasyMockandThrow)完成,但我主要是尋找一種原生Grails的方式。我會接受補充Grails測試框架的框架。模擬拋出一個模擬域名類異常

回答

1

使用Groovy的元類很簡單。對於這個例子,我會說你的一個域類是Foo。

void testFooThrowsException(){ 
    def fooInstance = new Foo() 
    fooInstance.metaClass.methodToTest = {arg1, arg2-> 
     throw new CustomException("I'm an exception") 
    } 

    shouldFail CustomException, {fooInstance.methodToTest("val1", "val2")} 
} 

修改實例的元類後,該實例將具有修改後的完整生命週期行爲。它是Groovy,IMO最酷的部分之一。

相關問題