我有更一般的問題。在使用Spock時,我應該在Grails 2.x中使用哪個框架或實現進行嘲諷?我知道大量的嘲笑風格:利用Groovy metaClass,Grails mockFor(),Groovy Mock(),Groovy閉包風格等。每種方法都有其優點和缺點。但我不明白的是,某些嘲笑風格在某些我無法確定的場合下工作(即mockFor()適用於某些實現,而不適用於其他場合)。使用Spock進行Grails測試 - 哪個模擬框架選擇?
目前我有兩個類似的服務方法嘲笑的實現。
這一個工程:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def myService = mockFor(MyService)
myService.demand.myMethod() { def st ->
return "test"
}
controller.myService = myService.createMock()
}
}
然而,這種實現不起作用:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def yourService = mockFor(YourService)
yourService.demand.yourMethod() { def st ->
return "test"
}
controller.yourService = yourService.createMock()
}
}
服務實現,並從控制器調用頗爲相似。那麼在Grails中嘲笑的最佳做法是什麼?還是有沒有什麼好的嘲笑框架的Grails,這將節省我的時間搞清楚如何模擬?
感謝您的任何建議! :-)
刁
你有沒有試過Spock的模擬框架?它非常清楚和直接。 spock文檔說它可以與spock mock或Groovy mock一起工作,但是警告不要因爲某種原因嘗試結合使用這兩個模擬框架。 –
是的,這實際上是當你調用mockFor()時會用到的。調用grails.plugin.spock.UnitSpec.mockFor()。我發現最有用的是直接使用metaClass編程進行模擬以及常規閉包。唯一的問題是,當你不在威脅下降部分清理它時,metaClass可能會干擾其他測試。 也許Grails 2.3會帶來更好的支持,因爲Spock是這個版本的默認設置... – kuceram
如果答案是合適的並且符合您的期望,那麼接受它以幫助其他人從您的問題中學習。 – dmahapatro