我试图在动态脚手架控制器的集成测试中模拟服务。我收到一个错误,指出服务的控制器属性不能从测试中访问。如何在动态脚手架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