데이터 무결성 위험: 실제 데이터베이스에 테스트용 데이터를 추가하거나 수정하는 작업을 진행하면 실제 데이터의 무결성이 위협받을 수 있습니다. 실수로 데이터를 삭제하거나 변경하여 실제 서비스에 영향을 줄 수 있습니다.
데이터 손실: 테스트를 위해 실제 데이터를 사용하다 보면, 테스트 작업 중에 데이터가 삭제되거나 수정되어 데이터 손실이 발생할 수 있습니다.
테스트 결과 불일치: 실제 데이터베이스에서 실행한 테스트는 실제 환경과 유사한 결과를 얻을 수 있지만, 테스트 도중 실제 데이터베이스의 상태가 변하면 예상치 못한 결과가 발생할 수 있습니다.
의존성 문제: 실제 데이터베이스에 의존하는 테스트는 환경에 의존성을 가지기 때문에 테스트를 다른 환경으로 이전하기 어려울 수 있습니다.
테스트 속도: 실제 데이터베이스를 사용한 테스트는 데이터베이스에 대한 I/O가 발생하므로 테스트 속도가 느려질 수 있습니다.
테스트 제어 어려움: 실제 데이터베이스를 사용한 테스트는 테스트 데이터의 상태에 따라 결과가 바뀔 수 있어 테스트 제어가 어려울 수 있습니다.
이런 저런 이슈가 유닛 테스트를 진행하면서 발생하게 되어서 늦게나마 로컬 테스트 환경을 따로 만들어 진행하기로 했다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
spring:
profiles:
active: local-test
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
jpa:
hibernate:
ddl-auto: create
show-sql: true
database-platform: h2
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;
@SpringBootTest
@Transactional
@ActiveProfiles("local-test")
class QuerydslProductRepositoryTest {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private QuerydslProductRepository querydslProductRepository;
....
}
정리가 잘 된 글이네요. 도움이 됐습니다.