복붙노트

[SPRING] Spring에서의 테스트 목적을 위해 메모리 데이터베이스에 특정 구성

SPRING

Spring에서의 테스트 목적을 위해 메모리 데이터베이스에 특정 구성

유닛 테스트를 실행할 때 H2 / HSQL과 같은 메모리 내 데이터베이스를 사용할 수 있도록 스프링 부트 애플리케이션을 구성하려면 어떻게해야합니까?하지만 스프링 부트 애플리케이션을 실행할 때 프로덕션 데이터베이스 [Postgre / MySQL]를 사용할 것입니까?

해결법

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

    1.이를 위해 스프링 프로파일을 사용할 수 있습니다. 이것은 특정한 방법 일 것입니다.

    이를 위해 스프링 프로파일을 사용할 수 있습니다. 이것은 특정한 방법 일 것입니다.

    환경 특정 등록 정보 파일이 있어야합니다.

    application.properties:

    spring.profiles.active: dev
    

    application-dev.properties

    spring.jpa.database: MYSQL
    spring.jpa.hibernate.ddl-auto: update
    
    spring.datasource.url: jdbc:mysql://localhost:3306/dbname
    spring.datasource.username: username
    spring.datasource.password: password
    

    application-test.properties

    spring.jpa.database: HSQL
    

    다음과 같이 pom.xml에 MySQL과 H2 드라이버가 모두 있어야합니다.

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>test</scope>
    </dependency>
    

    마지막으로, 최소한으로, @ActiveProfiles ( "test")로 테스트 클래스에 주석을 달아 라.

  2. ==============================

    2.또 다른 접근법은 @AutoConfigureTestDatabase 어노테이션을 테스트 클래스에 추가하는 것이다. 내 검사는 보통 다음과 같습니다.

    또 다른 접근법은 @AutoConfigureTestDatabase 어노테이션을 테스트 클래스에 추가하는 것이다. 내 검사는 보통 다음과 같습니다.

    @RunWith(SpringRunner.class)
    @DataJpaTest
    @AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
    public class MyRepositoryTest {
    
        @Autowired
        MyRepository repository;
    
        @Test
        public void test() throws Exception {
            // Tests...
        }
    }
    
  3. ==============================

    3.@Sanjay는 한 가지 방법이 있지만 혼란 스럽습니다. 프로덕션 환경에서 사용할 수있는 프로덕션 프로필 만 있으면됩니다.

    @Sanjay는 한 가지 방법이 있지만 혼란 스럽습니다. 프로덕션 환경에서 사용할 수있는 프로덕션 프로필 만 있으면됩니다.

    spring.jpa.hibernate.ddl-auto: update
    spring.datasource.url: jdbc:mysql://localhost:3306/dbname
    spring.datasource.username: username
    spring.datasource.password: password
    

    그리고 다른 것을 지정하지 마십시오. 테스트 범위에 포함 된 데이터베이스를 추가하면 테스트에서 사용할 수 있습니다. 테스트를 기본 프로파일 (사용자 정의가없는 경우)로 실행하면 데이터베이스 정보를 찾을 수 없습니다 (프로덕션 프로파일에 저장되므로). 이 경우 임베디드 데이터베이스를 찾고 시작합니다. 어떤 이유로 더 많은 사용자 정의가 필요한 경우 해당 애플리케이션에 대해 application-test.properties를 가질 수 있습니다. ActiveProfiles ( "test")를 테스트에 추가해야합니다.

  4. ==============================

    4.maven으로 빌드하는 경우 간단한 해결책 : src / test / resources 아래에 application.properties 파일을 놓고 테스트에 맞게 편집하십시오.

    maven으로 빌드하는 경우 간단한 해결책 : src / test / resources 아래에 application.properties 파일을 놓고 테스트에 맞게 편집하십시오.

    Spring (Boot) 프로파일 메커니즘은 범위면에서 "테스트 시간과 런타임 사이의 설정을 바꿔 놓는 것"을 넘어서는 매우 강력한 도구입니다. 분명히, 시연 된 바와 같이, 그것도 할 수 있습니다 :)

  5. ==============================

    5.가장 간단한 솔루션 :

    가장 간단한 솔루션 :

    1) src / main / resources에 application.properties (프로덕션 구성)가 있습니다.

    spring.datasource.url=jdbc:mysql://localhost:3306/somedb
    spring.datasource.username=root
    spring.datasource.password=password
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
    

    및 HSQL 구성과 같은 application-test.properties :

    spring.jpa.hibernate.ddl-auto = create-drop
    spring.jpa.database = HSQL
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect
    spring.datasource.driverClassName = org.hsqldb.jdbcDriver
    spring.datasource.url= jdbc:hsqldb:mem:scratchdb
    spring.datasource.username = sa
    spring.datasource.password =
    

    2) pom.xml에 HSQL 의존성을 추가하십시오.

    3) @ActiveProfiles ( "test")로 테스트 클래스에 주석을 답니다.

    내 경우에는 매력처럼 일 했어.

  6. from https://stackoverflow.com/questions/32001391/configure-specific-in-memory-database-for-testing-purpose-in-spring by cc-by-sa and MIT license