2016-11-07 6 views
0

나는 간단한 봄 부팅 응용 프로그램 구조 DBService의 새로운 인스턴스를 리턴하는 메소드. 이 메소드는 @Bean으로 주석 처리됩니다.봄 부팅 응용 프로그램의 테스트 전략 조언

@Bean 
public DBService dbService() { 
    return new DBService(); 
} 

DBService 클래스에는 Autowired가 포함되어 있습니다. 이 리포지토리는 다른 프로젝트 종속성에 속하며 RDBMS/Data Store에 연결합니다. autowire가 종속성 주입 실패 : 내 테스트 클래스에 dbService를 autowire하기 때

나는, 내가 오류 이름으로 콩을 만드는 'dbServices' "오류가 ApplicationContext를-test.xml의

<bean id="dbService" class="com.path.to.class.in.dependency"/> 

에서 빈을 정의 ; "

내가 뭘 잘못하고있어? 나는 스프링 부트 1.3.5를 사용하고 있으며 1.4 이후부터 사용 가능한 @SpringBootTest 주석을 사용할 수 없다. 어떤 도움을 많이 주시면 감사하겠습니다.

편집 : 차례로 DbService 클래스 저장소 클래스 (등등 userRepositoty, customerRepository 등)을 의미하기 때문에 , 나는 테스트 컨텍스트 파일에 너무 그 저장소의 콩을 정의하기 위해 노력했다. 그러나, DbService 클래스 (Main에 있음)에 삽입하고있는 저장소는 인터페이스이고 Spring Boot 프레임 워크는 런타임 중에 자동으로 실제 구현을 해결합니다. 테스트 컨텍스트에서이 작업을 수행하는 방법을 잘 모르겠습니다.

+0

@Maciej, 답변 주셔서 감사하지만 이것은 현재의 문제입니다. Main에있는 "DbService"는 인터페이스로 정의 된 저장소를 autowires합니다. 런타임시, Spring/Spring Boot는 프로젝트 의존성으로부터 자동으로 그러한 인터페이스의 구현을 제공합니다. 내 테스트 클래스 "MyTestRoot"에 "DbService"를 주입하려고 시도하고 있으며 Unit Test를 실행하는 동안 리포지토리의 구체적인 구현을 얻는 방법을 스프링에 알려주는 방법을 생각할 수 없습니다. 에러를 발생시킵니다 :'code' 이름이 'dbServices'인 빈을 생성하는 중 에러가 발생했습니다 : 자동적 인 의존성의 주입이 실패했습니다'code' –

+0

테스트 클래스로 질문을 업데이트하십시오. 나는 당신이 뭔가를 놓친 것 같아. –

답변

1

스프링 부트는 XML 파일에서 빈을 자동으로 가져 오지 않습니다. 구성 클래스 중 하나에 @ImportResource 주석을 사용하여 XML 파일에서 bean을 작성하십시오.

그런데 왜 이러한 bean을 XML 파일로 만드나요? 그들에게도 @Configuration 클래스를 사용하고 간단하게 유지하십시오. 또한

, 사용 @SpringBootApplication이 필요하지 않습니다

  • @EnableComponentScan
    • @EnableAutoConfiguration
    • 그들은 중복입니다. 정확히 주석이의 당기 않는 것을 알아 @SpringBootApplication 소스를 참조

    0

    내가 나를 위해 일한 발견 다음 게시물 :. http://tuhrig.de/inject-mocks-with-springs-contextconfiguration/

    내 문제는 내가 내 테스트에 DbService를 원했다. 그러나 DbService는 런타임시 스프링으로 해결 된 외부 패키지 종속성의 다른 빈에 의존했습니다. DbService가 사용하는 모든 autowired 빈의 모의를 반환하는 ServiceMockProvider 클래스를 설정했습니다. @ContextConfiguration 주석이 붙은 기본 테스트 클래스를 만들고 DbService 클래스와 ServiceMockProvider 클래스를 classes 특성에 제공했습니다. 모든 테스트 클래스는이 기본 클래스를 확장하며 테스트를 위해 좋습니다.

    희망이 있으면 도움이 될 것입니다.그리고 Thomas Uhrig에게 감사드립니다.