2017-04-24 12 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); 
    } 
} 

주에 com 패키지 반면

편집

OuterBeanTest.javasrc/test/javacom.general 패키지에 : 같은 지금 Spring-4.2.8을 일하지만 Spring-4.3.7으로 업그레이드했습니다. 그것은 작동을 멈췄다.

+0

'안 정적'모순이다. JLS # 8.1.3을 참조하십시오. 이것은 정적 클래스입니다. – EJP

+0

@EJP는 명시 적이었습니다. 나는 그 차이점을 안다. –

+0

일부 관련 정보가 누락되었습니다. 'OuterBeanTest'는 어떤 패키지입니까? 'SpringBootApp'가 속한 패키지는 무엇입니까? 그리고'SpringBootApp'에 어떤 주석이 있습니까? –

답변

0

스프링 부트 1.4의 테스트 지원은 더 이상 테스트 클래스 내의 정적 중첩 구성 요소를 자동으로 감지하지 않습니다. 이것은 배경으로 org.springframework.boot.test.context.filter.TestTypeExcludeFilter을 사용했기 때문입니다.

따라서 두 가지 옵션이 있습니다.

  1. 최상위 클래스로 이동 InnerBeanTest, 또는 ...
  2. 주석 @Import(OuterBeanTest.InnerBeanTest.class)OuterBeanTest.

감사합니다,