스프링 @DataJpaTest

김개발세발바닥·2024년 4월 13일

스프링

목록 보기
8/13

DataJpaTest.

JPA에 관련된 요소들만 테스트하기 위한 어노테이션으로 JPA 테스트에 관련된 설정들만 적용해준다.
메모리상에 내부 데이터베이스를 생성하고 @Entity 클래스들을 등록하고 JPA Repository 설정들을 해준다.
각 테스트마다 테스트가 완료되면 관련한 설정들은 롤백된다.
SpringBootTest에 비해 올라가는 Bean이 적어서 시간이 비약적으로 줄어드는 장점이 있다.

testRuntimeOnly 'com.h2database:h2'

@DataJpaTest는 기본적으로 H2 데이터베이스를 사용한다. 따라서 H2 데이터베이스를 gradle에 추가해줘야한다.

test전용 application.yml의 분리.

테스트를 돌릴 때 실제 서비스의 application.yml을 사용하면 안된다. 그렇다고 매번 수정해서 돌리기에는 번거롭고 실수가 나서 큰 실수로 이어질 수 있다.

test/resources/application.yml

스프링 부트 테스트는 우선 test/resources/application.yml을 먼저 찾고 없다면 src/resources/application.yml을 찾아서 실행시킨다. 따라서 테스트용 application.yml을 작성해주면 자동으로 해당 설정이 적용된다.

spring:
  datasource :
    url: jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1 //MYSQL로 테스트
    driverClassName: org.h2.Driver
    username: sa
    password:

  jpa:
    hibernate:
      ddl-auto: create-drop
    database-platform: org.hibernate.dialect.MySQL8Dialect //MYSQL로 테스트
logging:
  level:
    org.hibernate.orm.jdbc.bind: trace

test application.yml을 @DataJpaTest에 적용.

@DataJpaTest은 기본적으로 메모리DB를 사용하게 설정되어있다. (test전용 application.yml이 있어도.....)

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

AutoConfigureTestDatabase를 설정해서 자동으로 설정이 교체되는 것을 막으면 test application.yml을 사용할 수 있다.
따라서 메모리DB로 실행되던 테스트가 test application.yml에 설정된 db로 교체되어 테스트가 진행된다.

거의 @SpringBootTest만 이용하여 테스트코드를 작성했는데 @DataJpaTest를 사용하여 유닛테스트를 작성하면 시간도 절약되고 더 좋을 것 같다!

0개의 댓글