在 Grails 单元测试中注入服务

Posted

技术标签:

【中文标题】在 Grails 单元测试中注入服务【英文标题】:Inject Services in Grails Unit Test 【发布时间】:2012-08-31 10:31:36 【问题描述】:

我知道您可以使用以下方法在单元测试方法中简单地注入服务:

defineBeans 
   someService(SomeService)

但是当我需要在服务中注入服务时(服务someService 将自己称为另一个服务some2Service)。当我使用上面的代码运行测试时,我收到:

Message: Cannot invoke method someMethod() on null object

是否可以在单元测试中将服务注入到服务中?

谢谢。 ;-)

【问题讨论】:

【参考方案1】:

要在单元测试中使用 Spring bean,您需要执行以下操作:

defineBeans 闭包中包含测试所依赖的所有服务和其他 bean。 对于需要注入其他 bean 的 bean,将 autowire 属性设置为 true

例如:

defineBeans 
    someService(SomeService)  bean ->
        bean.autowire = true
    
    some2Service(Some2Service)

【讨论】:

Grails 2.24 支持吗?【参考方案2】:

您可以使用 ref 设置您的服务成员变量

MyService(MyProvider) 
        userDetailsService = ref("userDetailsService")
        springSecurityService = ref("springSecurityService")
        userService = ref("userService")
    

希望有帮助

【讨论】:

Grails 2.2.4 版本是否支持? 是的……我用的是 1.3.6 版

以上是关于在 Grails 单元测试中注入服务的主要内容,如果未能解决你的问题,请参考以下文章

Grails 单元测试问题

grails Grails 单元测试中的应用程序访问

在 Grails 中对服务进行单元测试时如何模拟请求

单元测试控制器时无法模拟 Grails 服务方法 - MissingMethodException

如何对使用转换器的 Grails 服务进行单元测试?

Grails Spock单元测试需要模拟事务管理器