-
10. 데이터베이스 테스트개발 도서/Unit Testing 2024. 6. 21. 23:17
10.1 데이터베이스 테스트를 위한 전제 조건
- 형상관리 시스템에 데이터베이스 유지
- 모든 개발자를 위한 별도의 데이터베이스 인스턴스 사용
- 데이터베이스 배포에 마이그레이션 방식 적용
10.1.1 데이터베이스를 형상 관리 시스템에 유지
데이터베이스 스키마를 소스 코드와 같이 형상 관리 시스템에 저장하라.
테이블, 뷰, 인덱스, 저장 프로시저와 데이터베이스 구성 방식에 대한 청사진이 되는 기타 모든 항목 등이 데이터베이스 스키마에 해당된다.10.1.2 참조 데이터도 데이터베이스 스키마다
참조 데이터도 데이터베이스 스키마에 해당한다.
이는 애플리케이션이 제대로 작동하도록 미리 채워져야 하는 데이터다.
참조 데이터와 일반 데이터를 구별하려면 애플리케이션에서 해당 데이터를 수정할 수 있는지 확인하면 된다.
수정할 수 있으면 일반 데이터이고, 그렇지 않으면 참조 데이터다.10.1.3 모든 개발자를 위한 별도의 데이터베이스 인스턴스
개발자마다 데이터베이스 인스턴스를 별도로 두게 하라.
더 좋은 방법은 개발자 장비에 인스턴스를 호스팅하는 것인데, 이렇게 하면 테스트 실행 속도를 극대화할 수 있다.10.1.4 상태 기반 데이터베이스 배포와 마이그레이션 기반 데이터베이스 배포
상태 기반 데이터베이스 배포 방식은 상태를 명시적으로 만들고 비교 도구가 마이그레이션을 암묵적으로 제어할 수 있도록 한다. 마이그레이션 기반 방식은 데이터 베이스를 특정 상태에서 다른 상태로 전환하게끔 명시적으로 마이그레이션을 사용하도록 한다.
데이터베이스 상태가 명확하면 병합 충돌을 좀 더 쉽게 처리할 수 있는 데 반해, 명시적 마이그레이션은 데이터 모션 문제를 해결하는 데 도움이 된다.상태 기반 방식보다는 마이그레이션 기반 방식을 선호한다.
데이터 모션 처리가 병합 충돌보다 훨씬 중요하기 때문이다.
마이그레이션을 통해 모든 수정 사항을 데이터베이스 스키마에 적용하라.10.2 데이터베이스 트랜잭션 관리
10.2.1 제품 코드에서 데이터베이스 트랜잭션 관리하기
비즈니스 연산은 데이터를 원자적으로 업데이트해야 한다.
원자성을 얻으려면 데이터베이스 트랜잭션 매커니즘에 의존하라.가능하면 작업 단위 패턴을 사용하라.
작업 단위는 데이터베이스 트랜잭션에 의존하며, 비즈니스 연산 종료 시점까지 업데이트를 모두 지연시켜서 성능을 향상시킨다.10.2.2 통합 테스트에서 데이터베이스 트랜잭션 관리하기
테스트 구절마다 데이터베이스 트랜잭션이나 작업 단위를 재사용하지 말라.
준비, 실행, 검증 구절에 각각 고유의 트랜잭션이나 작업 단위가 있어야 한다.10.3 테스트 데이터 생명 주기
10.3.1 병렬 테스트 실행과 순차적 테스트 실행
통합 테스트는 순차적으로 실행하라. 병렬 실행에는 상당한 노력이 필요하며, 그럴 가치가 없다.
10.3.2 테스트 실행 간 데이터 정리
테스트 시작 지점에 남은 데이터를 정리하라.
이 방식은 빠르고 일관성 없는 동작을 일으키지 않으며, 정리 단계를 실수로 건너뛰지 않는다.
이렇게 하면 별도의 종료 단계도 둘 필요가 없다.10.3.3 인메모리 데이터베이스 피하기
SQLite와 같은 인메모리 데이터베이스는 사용하지 말라.
다른 업체의 데이터베이스로 테스트를 실행하면 보호 수준이 떨어진다.
테스트에서도 운영 환경과 동일한 DBMS를 사용하라.10.4 테스트 구절에서 재사용하기
필수가 아닌 부분을 비공개 메서드 또는 헬퍼 메서드로 추출해 테스트를 단축하라
- 준비 구절에서는 테스트 데이터 빌더 대신 오브젝트 마더를 사용하라.
- 실행 구절에서는 데코레이터 메서드를 작성하라.
- 검증 구절에선느 플루언트 인터페이스를 사용하라.
10.5 데이터베이스 테스트에 대한 일반적인 질문
10.5.1 읽기 테스트를 해야 하는가?
읽기 테스트 임계치는 쓰기 테스트 임계치보다 높아야 한다.
가장 복잡하거나 중요한 읽기 작업만 테스트하라. 나머지는 무시하라.10.5.2 리포지터리 테스트를 해야 하는가?
리포지터리는 직접 테스트하지 말고 포괄적인 통합 테스트 스위트로 취급하라.
리포지터리 테스트는 회귀 방지에 대한 이득이 너무 적은 데 반해 유지비가 너무 높다.'개발 도서 > Unit Testing' 카테고리의 다른 글
11. 단위 테스트 안티 패턴 (0) 2024.06.22 9. 목 처리에 대한 모범 사례 (1) 2024.06.21 8. 통합 테스트를 하는 이유 (0) 2024.06.20 7. 가치 있는 단위 테스트를 위한 리팩터링 (0) 2024.06.20 6. 단위 테스트 스타일 (0) 2024.06.18