控制器集成测试grails3:未注入服务

控制器集成测试grails3:未注入服务,grails,integration-testing,grails-3.0,Grails,Integration Testing,Grails 3.0,我正在将grails应用程序从2.4.3升级到3.0.8。 有许多集成测试使用grails.util.GrailsWebUtil.bindMockWebRequestgrailsApplication.mainContext,然后是controller.method调用。但是我发现grails.util.GrailsWebUtil不再包含bindMockWebRequest方法,看起来它已经被grails.util.GrailsWebMockUtil替换了,好吧,但是控制器中声明的所有服务都没有

我正在将grails应用程序从2.4.3升级到3.0.8。 有许多集成测试使用grails.util.GrailsWebUtil.bindMockWebRequestgrailsApplication.mainContext,然后是controller.method调用。但是我发现grails.util.GrailsWebUtil不再包含bindMockWebRequest方法,看起来它已经被grails.util.GrailsWebMockUtil替换了,好吧,但是控制器中声明的所有服务都没有被注入到类中。我可以使用grails.test.spock.IntegrationSpec,但是这个类也已经从grails3中删除了。有一种方法可以使用功能测试来进行控制器的集成测试,但这种解决方案对我不起作用,我不想将所有这些测试都实现为功能测试,也不想将依赖项手动注入控制器实例,如何修复它?

使用grails.test.mixin.integration.integration注释代替grails.test.spock.IntegrationSpec类扩展


并将集成测试移到src/integration test/groovy。

我正在从Grails 2.5.1升级到3.2.4。我的一个集成测试找不到我注入def xxxService的服务。我将该服务包括在@Mock列表中。XxxServiceIntegrationSpec扩展了规范


我知道这与测试控制器不太相关,但也许它会有帮助

我们在旧的Grails2.x应用程序中集成了多个控制器区域。当我们迁移到Grails3时,我们希望保留它,不能从零开始抛出它们和编写功能测试

我在这里写了一篇博客

基本步骤是 -设置模拟请求和响应 -设置当前控制器名称 -测试结束时的rest模拟请求和响应

有关完整的示例,请参阅上面的博客文章


希望有帮助。

对于仍在寻找解决方案的人,我也遇到了同样的问题,我发现这个示例非常有用:

ConfigurableApplicationContext ctx=ConfigurableApplicationContextgrailsApplication.getMainContext;ctx.getBeanFactory.AutoWireBeanProperties控制器,AutowireCapableBeanFactory.AUTOWIRE按名称,false;-这可能是一个解决方案这里有一个完整的示例,说明如何使用grails 3@SudhirN为controller编写集成测试链接到您的博客不再工作鼓励使用指向外部资源的链接,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。