2017-04-24 2 views
1

次はテストクラスのクラスコードです。テスト・インスタンスにスプリングブートテストでテストクラスの静的ネストされた@Namedコンポーネントが検出されない

@SpringBootTest(classes = { SpringBootApp.class }, webEnvironment = WebEnvironment.RANDOM_PORT) 
public class OuterBeanTest { 

    @Inject 
    InnerBeanTest innerBean; 

    @Test 
    public void test() { 
     assertThat(this.innerBean.print()).isEqualTo("print"); 
    } 

    @Named 
    static class InnerBeanTest { 

     String print(){ 
      return "print"; 
     } 
    }; 
} 

しかし、静的クラスの注入についてUnsatisfied dependency expressed through field 'innerBean'; expected at least 1 bean which qualifies as autowire candidate.

私はテストインスタンスに注入することができますどのようにエラーがスローされますか?春ブートアプリケーションがsrc/main/java

SpringBootApp.java

package com; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class SpringBootApp { 

    public static void main(String[] args) { 

     SpringApplication.run(SpringBootApp.class, args); 
    } 
} 

NOTEにcomパッケージであるのに対し、

EDIT

OuterBeanTest.javaは、src/test/javacom.generalパッケージである:同じことが今Spring-4.2.8を働いたが、私Spring-4.3.7にアップグレードしましたそれは動作を停止しました。

+0

'インナー静的' という点で矛盾です。 JLS#8.1.3を参照してください。これは静的クラスです。 – EJP

+0

@EJPは明白であり、私はその違いを知っています。 –

+0

いくつかの関連情報がありません:「OuterBeanTest」はどのパッケージですか? 'SpringBootApp'はどのパッケージに入っていますか? 'SpringBootApp'にはどのような注釈がありますか? –

答えて

0

Spring Boot 1.4でのテストのサポートでは、テストクラス内の静的なネストされたコンポーネントが自動的に検出されなくなりました。これは、背後でorg.springframework.boot.test.context.filter.TestTypeExcludeFilterの使用が原因です。

このように、2つのオプションがあります。

  1. @Import(OuterBeanTest.InnerBeanTest.class)でトップレベルのクラスに移動InnerBeanTest、または...
  2. 注釈OuterBeanTest

よろしく、

サム

関連する問題