我正在尝试为注入了spring bean的服务编写集成测试。 spring bean在resources.groovy
中定义。我的服务使用的bean似乎没有在我的集成测试中注入,但是当我运行grails run-app
时,它会被正常注入。
这是一个最小的失败示例:
grails-app/conf/spring/resources.groovy
beans = {
myBean(Object){}
}
grails-app/services/MyService.groovy
class MyService {
def myBean
def serviceMethod(){
myBean.class.simpleName
}
}
grails-app/src/integration-test/groovy/MyServiceSpec.groovy
@Integration
class MyServiceSpec extends Specification {
def myService
when:
def myBean = myService.myBean
then:
myBean != null
}
Grails版本信息:
$ grails -v
| Grails Version: 3.1.9
| Groovy Version: 2.4.7
| JVM Version: 1.8.0_92
更新
Spring似乎注入其他服务就好了。如果我在MyService
内声明了另一个服务,它会被注入。
class MyService {
def myBean
def myOtherService
def serviceMethod(){
myBean.class.simpleName
}
}
答案 0 :(得分:0)
我可能迟到了这个...但是,对于未来的读者,请尝试在grails.gorm.autowire
true
到application.yml
答案 1 :(得分:-2)
你的例子有很多奇怪的东西,例如
beans = {
myBean(Object){}
}
我无法想象你为什么要创建一个Object
类型的bean,但这可能是为了示例的目的而进行的简化,而真正的bean有不同的类型。
@Integration
class MyServiceSpec extends Specification {
def myService
when:
def myBean = myService.myBean
then:
myBean != null
}
此测试归结为测试依赖注入是否有效,这意味着您测试Spring / Grails而不是您自己的代码。这不是你应该测试IMO的东西。
无论如何要解决您的问题,我认为您只需要添加@Autowired
注释
import org.springframework.beans.factory.annotation.*
@Integration
class MyServiceSpec extends Specification {
@Autowired
def myService
when:
def myBean = myService.myBean
then:
myBean != null
}