2017-12-29 61 views
1

SpringApplication.run()으로 보통 호출되는 @Service 클래스를 테스트하고 싶습니다. 나는 그것이 작동하지 않습니다 JUnit가에서하려고 할 때의 MongoService가 null가 아닌)가 컨트롤러에 의해 호출spring-boot @service class 테스트하기

@Service 
@EnableConfigurationProperties(AppProperties.class) 
public class MongoService { 

    private static final Logger logger = LoggerFactory.getLogger(MongoService.class); 

    private MongoClient mongoClient; 

    private final AppProperties properties; 

    @Autowired 
    public MongoService(AppProperties properties) { 
     this.properties = properties; 
    } 

    /** 
    * Open connection 
    */ 
    public void openConnection() { 

     try { 
      mongoClient = new MongoClient(new MongoClientURI(properties.getMongoConnectionString())); 
     } catch (Exception e) { 
      logger.error("Cannot create connection to Search&Browse database", e); 
      throw new BackendException("Cannot create connection to Search&Browse database"); 
     } 
    } 

} 

이 SpringApplication.run (로 시작했지만 :

서비스 클래스입니다.

@RunWith(SpringRunner.class) 
@SpringBootTest 
@ContextConfiguration(classes = AppProperties.class) 
public class MongoServiceTest { 

    private static final Logger logger = LoggerFactory.getLogger(MongoServiceTest.class); 

    @Autowired 
    MongoService mongoService; 

    @Test 
    public void MongoServiceAutowired() { 
     assertNotNull(mongoService); 
    } 
} 

그러나 나는이 예외 받고 있어요 :

그래서, 나는이 노력하고있어

org.springframework.beans.factory.UnsatisfiedDependencyException : 오류는 '이름으로 빈을 생성을 mypackage.MongoServiceTest ':'mongoService '필드를 통해 표현 된 만족스럽지 못한 의존성; 중첩 예외는 org.springframework.beans.factory.NoSuchBeanDefinitionException : 유형 'mypackage.services.mongo.MongoService'의 유효한 Bean이 없습니다 : 적어도 하나의 bean이 예상 autowire 후보가됩니다. 종속성 주석 : {@ org.springframework.beans.factory.annotation.Autowired (필수 = true)}

실마리? 내가 어디에서 실패 했는가?

+0

'@ SpringBootTest'는 프로젝트의 루트 레벨에 있어야하는'@ SpringBootApplication'을 찾고 있습니다 (스프링 구성 요소/구성을 재귀 적으로 검색하기 때문에) [또는 @ComponentScan을 통해 항목을 찾을 위치를 지정하기 때문에 ']. 이 경우인가요? – DerM

+0

@ComponentScan을 추가했지만 성공하지 못했습니다 (jUnits는/test 폴더에 저장 됨) –

답변

1

난 당신이 그런 식으로 MongoService를 삽입 할 수없는 경우 AppPropertiesMongoService이 같은 패키지에

아니라고 가정

TestConfiguration

@ComponentScan(basePackageClasses = { 
     MongoService.class, 
     AppProperties.class 
}) 
@SpringBootApplication 
public class TestConfiguration { 
    public static void main(String[] args) { 
     SpringApplication.run(TestConfiguration.class, args); 
    } 
} 

그리고의 이름이 다른 클래스를 생성 테스트를 다음으로 변경 :

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = TestConfiguration.class) 
public class MongoServiceTest { 

    private static final Logger logger = LoggerFactory.getLogger(MongoServiceTest.class); 

    @Autowired 
    MongoService mongoService; 

    @Test 
    public void MongoServiceAutowired() { 
     assertNotNull(mongoService); 
    } 
}