[SPRING] Spring에서의 테스트 목적을 위해 메모리 데이터베이스에 특정 구성
SPRINGSpring에서의 테스트 목적을 위해 메모리 데이터베이스에 특정 구성
유닛 테스트를 실행할 때 H2 / HSQL과 같은 메모리 내 데이터베이스를 사용할 수 있도록 스프링 부트 애플리케이션을 구성하려면 어떻게해야합니까?하지만 스프링 부트 애플리케이션을 실행할 때 프로덕션 데이터베이스 [Postgre / MySQL]를 사용할 것입니까?
해결법
-
==============================
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.또 다른 접근법은 @AutoConfigureTestDatabase 어노테이션을 테스트 클래스에 추가하는 것이다. 내 검사는 보통 다음과 같습니다.
또 다른 접근법은 @AutoConfigureTestDatabase 어노테이션을 테스트 클래스에 추가하는 것이다. 내 검사는 보통 다음과 같습니다.
@RunWith(SpringRunner.class) @DataJpaTest @AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2) public class MyRepositoryTest { @Autowired MyRepository repository; @Test public void test() throws Exception { // Tests... } }
-
==============================
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.maven으로 빌드하는 경우 간단한 해결책 : src / test / resources 아래에 application.properties 파일을 놓고 테스트에 맞게 편집하십시오.
maven으로 빌드하는 경우 간단한 해결책 : src / test / resources 아래에 application.properties 파일을 놓고 테스트에 맞게 편집하십시오.
Spring (Boot) 프로파일 메커니즘은 범위면에서 "테스트 시간과 런타임 사이의 설정을 바꿔 놓는 것"을 넘어서는 매우 강력한 도구입니다. 분명히, 시연 된 바와 같이, 그것도 할 수 있습니다 :)
-
==============================
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")로 테스트 클래스에 주석을 답니다.
내 경우에는 매력처럼 일 했어.
from https://stackoverflow.com/questions/32001391/configure-specific-in-memory-database-for-testing-purpose-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Java Spring 애플리케이션 프로파일 링 (0) | 2019.03.02 |
---|---|
[SPRING] 스프링 보안 로그 아웃이 작동하지 않음 - 보안 컨텍스트를 지우지 않고 인증 된 사용자가 여전히 존재 함 (0) | 2019.03.02 |
[SPRING] Spring MVC - 폼에 여러 제출 버튼 (0) | 2019.03.02 |
[SPRING] Java Dependency Injection : XML 또는 주석 (0) | 2019.03.02 |
[SPRING] 매개 변수가있는 JUnit SpringJUnit4ClassRunner를 실행하는 방법 (0) | 2019.03.01 |