2016-07-28 6 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を作成したいと思いますなぜ私が想像することはできませんが、多分これはあなたが例の目的のために作られ、実際のBeanが別の型を持つ単純化です。

@Integration 
class MyServiceSpec extends Specification { 
    def myService 

    when: 
    def myBean = myService.myBean 

    then: 
    myBean != null 
} 

このテストでは、依存性注入が動作するかどうかをテストすることになります。これは、自分のコードではなくSpring/Grailsをテストすることを意味します。これはあなたがIMOをテストすべきものではありません。とにかく、あなたの問題を解決するために

私はあなただけ私はこの1つ上のパーティーに遅刻する...しかし、将来の読者のために、truegrails.gorm.autowireを設定してみてくださいこと@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はまだnullです。 –

0

を追加する必要があると思いますあなたの中でapplication.yml

関連する問題