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는 큰 도움이 될 수 있음