-
10장 - 데이터베이스 테스트테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 8. 17. 00:01
10장에서 다루는 내용
- 데이터베이스 테스트를 위한 전제 조건
- 데이터베이스 테스트 모범 사례
- 테스트 데이터 생명 주기
- 테스트 내 데이터베이스 트랜잭션 관리
데이터베이스 테스트를 위한 전제 조건
목을 사용하지 않으면 테스트하기 힘들 수 있습니다.
- 데이터베이스를 형상 관리 시스템에 유지
- Git과 같은 형상 관리 시스템에 데이터베이스를 저장하는 것이 최선이다. (예시: Flyway)
- 그렇지 않다면 버그 재현을 위해 과거의 특정 시점으로 되돌리기 어렵다.
- 참조 데이터도 데이터베이스 스키마다
- 애플리케이션이 데이터를 수정할 수 있으면 일반 데이터이며, 그렇지 않으면 참조 데이터이다.
- 애플리케이션이 참조 데이터를 수정하지 못하게 해야한다.
- 개발자마다 별도의 데이터베이스 인스턴스를 활용
데이터베이스 트랜잭션 관리
트랜잭션관리는 제품 코드와 테스트 코드 모두에 중요합니다.
이를 통하여 데이터베이스의 원자성을 잘 지켜주어야 합니다.
Spring에서는 @Transactional 사용하면 된다.
테스트 데이터 생명 주기
- 테스트를 순차적으로 실행
- 테스트 실행 간에 남은 데이터를 제거
모든 테스트 데이터가 고유한지, 남은 데이터를 정리하기 등으로 병렬 테스트를 수행하기 위해서는 큰 비용이 든다.
도커 컨테이너를 만들어하는 방안도 있지만 책에서는 비추천한다.
테스트 간 데이터 제거는 @BeforeEach, @AfterEach 등을 활용할 수 있다.
인메모리 데이터베이스 지양
- 빠르지만 실제 데이터베이스와 다르기 때문에 일관성이 떨어지게 되고 사용하지 않는 것이 좋습니다.
테스트 구절 코드 재사용
- 짧은 테스트라도 서로 의존하지 않도록 해야 한다.
- 헬퍼 클래스 활용
읽기 테스트를 해야 하는가?
- 쓰기를 테스트하는 것은 매우 중요합니다.
- 복잡하거나 중요한 읽기 작업만 테스트하고 나머지는 무시하라.
- 굳이 읽기 테스트가 아니더라도 비슷하게 목 체계가 너무 복잡해서 유지비가 너무 많이 들고, 회귀 방지의 이점이 적다면 하지 마라
'테스트코드(Test Code) > 단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴' 카테고리의 다른 글
11장 - 단위 테스트 안티 패턴 (0) 2023.08.18 9장 - 목 처리에 대한 모범 사례 (0) 2023.08.10 8장 - 통합 테스트를 하는 이유 (0) 2023.07.23 7장 - 가치 있는 단위 테스트를 위한 리팩터링 (0) 2023.07.08 6장 - 단위 테스트 스타일 (0) 2023.07.07