[xUnit 테스트 패턴] 13장 - 데이터베이스와 테스트
13장 - 데이터베이스와 테스트
개요
- 데이터베이스를 사용하면
느린 테스트
및 여러 가지 테스트 냄새가 자동 테스트 스위트
에서 날 수 있다.
데이터베이스 테스트하기 목표
데이터베이스 없이 테스트할 수 있다면 수단과 방법을 가리지 마라!
데이터베이스를 이용한 테스트가 필요한 이유
- 데이터베이스가 애플리케이션에서 필수적인 부분이여서 제대로 사용하는지 검증하는 것은 꼭 필요 한다.
- 데이터베이스 샌드박스로 개발자와 테스터를 제품과 격리시켜야 한다.
데이터베이스와 관련된 문제
지속되는 픽스처
- 데이터베이스틑 테스트 냄새를 불러 일으키는 주원인 중 하나
- 느린 테스트, 변덕스러운 테스트, 애매한 테스트 발생
- 테스트 픽스처의 영속성으로 아래 문제 발생
- 반복 안 되는 테스트, 서로 반응하는 테스트 발생
공유 픽스처
- 엮인 테스트
- 개별 데이터베이스 샌드박스가 없다면 개발자 간에 테스트 실행 전쟁이 생길 수 있다.
일반 픽스처
- 데이터베이스 사용 시 커다란
일반 픽스처
가 돼 여러 테스트에서 다른 목적으로 사용하게 된다.
- 미리 만든 픽스처를 쓸 때와 결과가 비슷해짐
- 신선한 픽스처를 쓰려다가 표준 픽스처를 쓰게 됨
데이터베이스 없이 테스트하기
- 레이어 테스트로 데이터 접근 레이어를 테스트 대역으로 교체
- 가짜 데이터베이스나 메모리 데이터베이스 사용
- 가짜 데이터 베이스 : 데이터베이스인 척 하는 데이터 접근 레이어
- 메모리 데이터 베이스 : 테이블을 전부 메모리에 저장
- 일련번호 생성 같은 벤더 전용 기능 구현
- SUT에게 대체 객체를 쓰게 만드는 방법 2가지
- 의존 주입
- 의존 찾기로 데이터 접근 레이어 찾기
데이터베이스 테스트하기
- 데이터베이스 테스트가 필요한 경우
- 저장 프로시저를 쓰고 있다면 단위 테스트 작성
- 데이터 접근 레이어가 비즈니스 로직으로부터 데이터베이스를 숨기고 있다면 데이터 접근 기능에 대한 테스트 작성
저장 프로시저 테스트하기
- 원격 저장 프로시저 테스트는 단위 테스트를 작성한 프로그래밍 언어로 작성하고 같은 프레임워크를 쓴다.
데이터 접근 레이어 테스트하기
- 대부분 데이터 접근 레이어 테스트는
왕복 테스트
다.
- 트랜잭션 롤백 해체
- 테이블 삭제 해체
- 개발자별로 데이터베이스 샌드박스가 있고, 하나 이상의 테이블에 모든 데이터를 지우고 싶을 때에만 적당
개발자의 독립성 보장하기
- 테스트 실행기별 DB 스키마 사용
- 데이터베이스 분할 스키마 사용
데이터베이스로 테스트하기(한 번 더)
가능한 한 적게, 하지만 너무 적지도 않게!
- 고객 테스트 중 대표적인 것 하나 정도를 뽑아 테스트