복붙노트

[SPRING] Spring + JUnit + H2 + JPA : 모든 테스트에 대해 데이터베이스를 삭제할 수 있습니까?

SPRING

Spring + JUnit + H2 + JPA : 모든 테스트에 대해 데이터베이스를 삭제할 수 있습니까?

JUnit 테스트 사이의 독립성을 유지하려면 모든 테스트를 시작할 때 데이터베이스를 만들고 모든 테스트가 끝날 때마다 데이터베이스를 파괴해야합니다.

데이터베이스는 SQL 파일 (Native insert queries ...)에있는 SQL 쿼리를 실행하여 메모리 (H2 데이터베이스)에 만들어야합니다.

특성 파일에서 키 - 값을 정의하고 JPA 스펙 (persistence.xml)을 존중하며, 주석 / 삽입을 사용하여 모든 JUnit 테스트에 대해 데이터베이스를 작성할 수 있습니까?

정말 고마워!

해결법

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

    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. ==============================

    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. ==============================

    3.JPA2.1은 EMF가 초기화 될 때 스키마의 삭제 및 작성을 지원합니다.

    JPA2.1은 EMF가 초기화 될 때 스키마의 삭제 및 작성을 지원합니다.

  4. 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