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 {
}