Spring
에서는 데이터베이스 접근 코드를 테스트할 때 각각의 테스트를 독립적이고 반복 수행 가능하도록 쉽게 만들 수 있다.
테스트 데이터베이스 설정
test/resources/application.properties
에 테스트 전용 데이터베이스의 jdbc url을 설정하여 테스트만을 위한 독립적인 공간을 만들자.
그리고 springframework.jdbc
의 로깅 레벨을 DEBUG
로 설정하여 내부적으로 작업이 잘 수행되는지 확인할 수 있도록 하자.
테스트 환경에서 다른 빈 컨테이너 설정을 해야 한다면 @Profile
어노테이션과 spring.profiles.active
설정값으로 테스트용 프로파일을 사용하도록 할수도 있다.
test/resources/application.properties
spring.profiles.active=test
spring.datasource.url=(jdbc url for test)
logging.level.org.springframework.jdbc=DEBUG
임베디드 데이터베이스 사용
만약 데이터베이스가 임베디드 데이터베이스 기능을 제공한다면 spring.datasource.url
설정부분을 주석처리해도 된다. 이렇게 하면 [[Spring Boot]]가 자동으로 임베디드 데이터베이스를 찾아 데이터소스에 연결해준다.
테스트 설정
@Transactional
과 @SpringBootTest
를 테스트 클래스에 추가해주자. 전자는 각 테스트를 트랜잭션으로 만들어주고 후자는 @SpringBootApplication
어노테이션이 붙은 설정클래스를 찾아 설정을 진행해준다.
일반적인 경우에 @Transactional
은 각 트랜잭션 마지막에 예외가 발생하지 않으면 트랜잭션을 커밋하지만, @SpringBootTest
가 붙은 클래스에 함께 사용하게되면 항상 트랜잭션을 롤백해준다.
@Transactional
@SpringBootTest
class SpringDataTest {
//...
}