[SPRING] Spring + JUnit + H2 + JPA : 모든 테스트에 대해 데이터베이스를 삭제할 수 있습니까?
SPRINGSpring + JUnit + H2 + JPA : 모든 테스트에 대해 데이터베이스를 삭제할 수 있습니까?
JUnit 테스트 사이의 독립성을 유지하려면 모든 테스트를 시작할 때 데이터베이스를 만들고 모든 테스트가 끝날 때마다 데이터베이스를 파괴해야합니다.
데이터베이스는 SQL 파일 (Native insert queries ...)에있는 SQL 쿼리를 실행하여 메모리 (H2 데이터베이스)에 만들어야합니다.
특성 파일에서 키 - 값을 정의하고 JPA 스펙 (persistence.xml)을 존중하며, 주석 / 삽입을 사용하여 모든 JUnit 테스트에 대해 데이터베이스를 작성할 수 있습니까?
정말 고마워!
해결법
-
==============================
1.Spring의 내장 데이터베이스 설정을 사용하여 H2 데이터 소스를 지정할 수 있어야한다.
Spring의 내장 데이터베이스 설정을 사용하여 H2 데이터 소스를 지정할 수 있어야한다.
<jdbc:embedded-database id="dataSource" type="H2"> <!-- Modify locations appropriately for your environment --> <jdbc:script location="classpath:db-schema.sql"/> <jdbc:script location="classpath:db-test-data.sql"/> </jdbc:embedded-database>
적절한 네임 스페이스 선언을 사용하여 테스트 관련 testApplicationContext.xml에 있어야합니다.
Spring은 테스트 스위트 (테스트 클래스)의 시작 부분에 테스트 애플리케이션 컨텍스트를 가져올 때 H2 데이터 소스를 생성한다. Spring은 테스트 클래스 기간 동안 애플리케이션 컨텍스트를 캐시하기 때문에 @DirtiesContext로 테스트 클래스에 주석을 달아서 애플리케이션 컨텍스트가 다시 작성되고 각 테스트 메소드에 대해 데이터 소스가 다시 초기화된다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:/your/testApplicationContext.xml"}) @DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD) public class SomeDatabaseTest { @Autowired private SomeDao dao; // Test methods }
Spring의 임베디드 데이터베이스 기능에 대한 더 많은 정보는 여기에서 찾을 수있다.
-
==============================
2.아마도 JPA 또는 Spring 기능을 사용해야하지만, 완전성을 위해 :
아마도 JPA 또는 Spring 기능을 사용해야하지만, 완전성을 위해 :
데이터베이스 측면에서 H2는 다음과 같이 데이터베이스를 열 때 init 스크립트 실행을 지원합니다.
jdbc:h2:mem:test;INIT=runscript from '~/create.sql'
또는
jdbc:h2:mem:test;INIT=runscript from 'classpath:/com/acme/create.sql'
그리고 위의 예와 같이 인 메모리 데이터베이스를 닫으면 데이터가 삭제됩니다. 또는 SQL 문을 실행하여 모든 개체를 삭제할 수 있습니다.
-
==============================
3.JPA2.1은 EMF가 초기화 될 때 스키마의 삭제 및 작성을 지원합니다.
JPA2.1은 EMF가 초기화 될 때 스키마의 삭제 및 작성을 지원합니다.
from https://stackoverflow.com/questions/21246802/spring-junit-h2-jpa-is-it-possible-to-drop-create-the-database-for-every by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 전파 전달을 지원하는 Spring 트랜잭션 (0) | 2019.04.06 |
---|---|
[SPRING] 봄 부트 임베디드 톰캣 로그 (0) | 2019.04.06 |
[SPRING] 개찰구 @SpringBean은 빈을 만들 수 없습니다. (0) | 2019.04.06 |
[SPRING] java.lang.ClassNotFoundException : org.springframework.orm.hibernate4.LocalSessionFactoryBean (0) | 2019.04.06 |
[SPRING] 사용자 정의 스프링 범위? (0) | 2019.04.06 |