2016-07-28 136 views
1

我正在尝试为注入Spring bean的服务编写集成测试。春豆在resources.groovy中定义。我的服务正在使用的bean似乎没有在我的集成测试中注入,但当我运行grails run-app时它被注入正常。从resources.groovy注入Spring Beans到Grails 3服务的集成测试

这里是一个最小的失败例如:

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 

更新:

春天似乎注入其他服务就好了。如果我在MyService内声明另一项服务,它会被注入。

class MyService { 
    def myBean 
    def myOtherService 

    def serviceMethod(){ 
    myBean.class.simpleName 
    } 
} 
+0

集成不应该看起来像你有什么。添加一个测试用例,然后使用'when'和'then'。 – dmahapatro

+0

你是什么意思“集成不应该看起来像你有什么”。我的测试用例确实有,然后... –

+0

你好。这个问题有什么好运?你有没有找到任何方法使其工作,或解决方法? – Seagull

回答

-2

关于你的例子有很多特殊的事情,例如,

beans = { 
    myBean(Object){} 
} 

我无法想象为什么你要创建Object类型的豆,但也许这是你的例子的目的,真正的bean有不同的类型进行简化。

@Integration 
class MyServiceSpec extends Specification { 
    def myService 

    when: 
    def myBean = myService.myBean 

    then: 
    myBean != null 
} 

这个测试归结于测试是否依赖注入的作品,这意味着你的测试春/ 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 
} 
+1

嘿,那里。该示例的重点在于显示依赖注入不起作用:)。该测试只是一个人为的例子来证明问题。 添加'@ Autowired'不幸的是没有任何区别。服务没有被注入,myBean仍然是空的。 –

0

我可能会迟到就这一个派对...但是,对于未来的读者,可以尝试设置grails.gorm.autowiretrue在你的application.yml