1. 개요
- Sociable Test(실제 DB 연동) 방식의 단위 테스트 구축 방법 공유
- TypeORM 같은 ORM은 타입 안전성 문제가 있어, 실제 DB를 사용한 테스트가 필요함
2. Solitary Test vs Sociable Test
- 비교
- Solitary Test 는 의존성을 Mock으로 대체하여 독립적으로 테스트 (빠르지만 실제 환경과 차이가 발생할 수 있음)
- Sociable Test 는 실제 외부 의존성(DB)과 함께 테스트하여 신뢰성 확보 가능 (속도가 느리지만 현실적인 문제를 조기에 발견)
- Solitary Test의 한계
- 모킹으로는 실제 DB와의 상호작용 문제를 완벽히 발견하기 어려움
- TypeORM의 타입 체크 문제로 인해 런타임 에러가 발생할 수 있음
- Sociable Test 필요성
- 실제 DB와의 연동을 통해 복잡한 쿼리, 트랜잭션, 관계 설정 문제를 검증할 수 있음
- 테스트 데이터베이스를 설정하여 트랜잭션 방식으로 데이터 격리 테스트 수행
- DB Sociable Test의 장점과 주의점
- 장점: 신뢰성 높은 테스트, ORM 관련 문제 조기 발견, 스키마 불일치 확인
- 주의점: 테스트 속도 저하, 환경 설정 복잡, 트랜잭션 관리 필요
3. NestJS에서 DB 연동 테스트 구현
- 설정
- MySQL을 이용한 테스트 DB 연결 설정
- 트랜잭션을 활용하여 각 테스트의 변경 사항을 롤백 처리
- Jest 테스트 프레임워크의 라이프사이클 활용
- beforeAll / beforeEach / afterEach / afterAll 를 이용
- DB 초기화 및 연결, 트랜잭션 시작 및 종료 설정
4. 결론
- 단위 테스트 작성시 Solitary Test와 Sociable Test를 적절히 조합하여 사용하면 좋음
- ORM 관련 문제를 방지하기 위해 Sociable Test는 큰 도움이 될 수 있음