我試圖在動態腳手架控制器的集成測試中模擬服務。我收到一個錯誤,指出服務的控制器屬性不能從測試中訪問。如何在動態腳手架Grails控制器的集成測試中模擬服務?
似乎動態腳手架的控制器不能用單元測試進行測試,所以我正在使用集成測試。我想嘲笑服務來測試我的應用程序中的錯誤處理。這是Grails 2.2.0中的錯誤還是我做錯了?
爲grails test-app
的結果是:
groovy.lang.MissingPropertyException: No such property: myService for class: MyController
實施例:
我已修改src/templates/scaffolding/Controller.groovy
:
class ${className}Controller {
MyService myService
def action() {
render myService.serviceMethod()
}
}
動態腳手架MyController.groovy
:
class MyController {
static scaffold = MyDomainClass
}
集成測試MyControllerTests.groovy
:
class MyControllerTests extends GroovyTestCase {
def myController
@Before
void setUp() {
myController = new MyController()
}
void testMock() {
myController.myService = [ serviceMethod : { return "foo" } ] as MyService
controller.action()
}
}
謝謝! controller.setXxxService()方法取得了訣竅!不過,作爲參數的Map需要一個類型轉換:'controller.setMyService([...]作爲MyService)'。此外,您需要將服務重置爲真正的服務以進行下一個測試。 Grails在設置好之後似乎會保持模擬。我將在下面的另一個答案中顯示一個示例實現。 – apa64 2013-02-10 17:03:05