복붙노트

[SPRING] 테스트 할 때 데이터 소스로 봄 부팅

SPRING

테스트 할 때 데이터 소스로 봄 부팅

Spring Boot 응용 프로그램을 사용하고 있으며 자동 구성이 활성화되어 있습니다. 기본 응용 프로그램 파일은 @EnableAutoConfiguration으로 표시됩니다. JNDI에서 조회 한 데이터 소스는 java config를 사용하여 구성되며 데이터 소스를 만드는 클래스는 @Configuration으로 표시됩니다.

다음과 같은 테스트 클래스가 있습니다.

@RunWith( SpringJUnit4ClassRunner.class )
@WebAppConfiguration
@ContextConfiguration( classes = Application.class )
public class TestSomeBusiness {}

문제는 테스트 케이스를 실행할 때, 테스트 케이스가 서버 환경에서 실행되지 않기 때문에 실패하는 데이터 소스 jndi 조회가 발생하는 것입니다. 내가 아는 한 @Configuration으로 표시된 클래스 경로의 클래스가 실행되고 데이터 소스 조회가 호출되는 이유.

이제는 해결 된 JNDI 조회 대신 DriverManagerDataSource를 사용하여 데이터 소스를 작성하므로 서버 환경이 아닌 데이터 소스 조회가 실패하지 않습니다.

내 질문은 다음과 같습니다.

1) 데이터 소스를 어떻게 다룰 것인가? (JNDI를 볼 때) 테스트를위한 봄 부팅 응용 프로그램?

2) 테스트 케이스를 실행할 때 데이터 소스 구성 클래스가 호출되지 않도록 제외 할 수 있습니까?

3) 테스트 케이스를 실행할 때 JNDI 검색을 수행 할 수 있도록 임베디드 서버를 생성해야합니까?

해결법

  1. ==============================

    1.application.properties 설정 파일을 src / test / resources에 추가 할 수 있으며, 봄 부팅은 테스트 환경에서 이러한 설정을 선택합니다. 나는 당신이 src / main / resources에 application.properties를 가지고 있다고 가정한다.

    application.properties 설정 파일을 src / test / resources에 추가 할 수 있으며, 봄 부팅은 테스트 환경에서 이러한 설정을 선택합니다. 나는 당신이 src / main / resources에 application.properties를 가지고 있다고 가정한다.

    spring.datasource.jndi-name=some_jndi
    

    이 JNDI 자원은 프로덕션 환경에서 사용됩니다. 테스트 환경에서는 MySQL 데이터베이스를 사용하여 다음 구성을 테스트 application.properties에 추가 할 수 있습니다.

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    내가 말했듯이, 테스트 특정 구성을 추가하여 프로덕션에 JNDI를 사용한다는 사실을 완전히 무시할 수 있습니다.

    org.springframework.mock.jndi 패키지에서 사용할 수있는 기능을 사용하여 JNDI 리소스를 조롱 할 수 있습니다. 예를 들어 SimpleNamingContextBuilder를 사용하면 다음을 수행 할 수 있습니다.

    SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
    builder.bind("jndi_name", dataSource);
    builder.activate();
    

    물론 다른 옵션은 테스트 환경에서 비 JNDI 리소스를 사용하는 것입니다.

  2. from https://stackoverflow.com/questions/34756264/spring-boot-with-datasource-when-testing by cc-by-sa and MIT license