DataJpaTest (Spring Boot 3.0.1 API)

AutoConfigureTestDatabase (Spring Boot 3.0.1 API)


환경

사용자 회원가입과 목록 조회를 위한 JPA repository interface는 다음과 같이 구현되어 있다.

UserRepository

package study.junit.user.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import study.junit.user.domain.User;

public interface UserRepository extends JpaRepository<User, Long> {
}

@DataJpaTest

SpringBoot는 JPA repository를 손쉽게 test 할 수 있는 @DataJpaTest annotation을 제공하고 있다. @DataJpaTest를 사용하면 전체 auto-configuration이 disable되고, JPA test와 관련된 configuration만 적용된다.

@DataJpaTest는 기본적으로 embedded in-memory database인 H2를 기반으로 test용 database를 구축하며, test가 끝나면 transaction을 roll-back 해준다. 이 설정은 @AutoConfigureTestDatabase annotation을 사용하여 재정의할 수 있다.

SQL query는 spring.jpa.show-sql 속성을 true로 설정하여 기본적으로 log된다. 이는 showSql 설정을 사용함으로써 disabled 될 수 있다.

만약 전체 application configuration을 load하려고 하지만, embedded database를 사용하고 싶다면 @AutoConfigureTestDatabase와 결합된 @SpringBootTest를 고려해야 한다.

Repository layer는 실제 DB와 통신 없이 단순 mocking하는 것은 의미가 없으므로 직접 database와 통신하는 @DataJpaTest를 사용하도록 하자.

<aside> 💁‍♂️ 기본적으로 test database로 H2 database를 사용하므로 build.gradle에 H2 database가 추가되어 있어야 한다.

dependencies {
    runtimeOnly 'com.mysql:mysql-connector-j'
    runtimeOnly 'com.h2database:h2'  // for @DataJpaTest
}

</aside>

Test용 Embedded Database가 아닌 실제 Database와 연결하여 Test 진행

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class JpaTest {
}