AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

확장성과 유지보수성 있는 Django 단위 테스트 작성 가이드

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Django 개발자 및 테스트 엔지니어 (중간~고급 난이도)

핵심 요약

  • BaseMapFactoryConstantModelMap을 통해 테스트 데이터를 모듈화하고 중복 제거 (DRY)
  • @patchMagicMock을 활용한 외부 의존성 모킹으로 테스트 고립성 확보
  • BaseDjangoTestCase를 상속받아 공유 설정과 테스트 모델 생성을 통합 관리

섹션별 세부 요약

1. 프로젝트 구조 설계

  • base_test/ 폴더에 공유 테스트 로직(base_map_factory.py, constant_model_map.py, base_test_case.py) 집중 관리
  • your_app/tests/에 앱별 테스트 코드(merchant_map.py, test_send_key_salt.py) 구조화

2. `BaseMapFactory` 활용

  • get_map() 메서드로 테스트 데이터 복제 및 동적 업데이트
  • copy.deepcopy() 사용으로 원본 데이터 변조 방지
  • merchant_info, merchant_credentials 등의 테스트 데이터를 ConstantModelMap에 중앙 집중 관리

3. `BaseDjangoTestCase` 설계

  • setUpClass()에서 공유 테스트 모델(Merchant, MerchantCredentials) 자동 생성
  • cls.models_map을 통해 테스트 데이터를 동적 주입

4. 테스트 예제: `test_send_key_salt.py`

  • @patch.object(AppLogger, "info")를 통해 로깅 모킹
  • self.map.get_map([...])로 요청/응답 데이터 동적 생성
  • assert_called_once()로 외부 서비스 호출 검증

5. 테스트 도구 활용

  • django.test.TestCaseClient()를 통한 HTTP 요청 시뮬레이션
  • unittest.mock.patch로 외부 API, DB, 파일 시스템 호출 방지
  • SimpleUploadedFileopenpyxl을 통한 파일 업로드 테스트 지원

결론

  • BaseMapFactory@patch를 결합한 패턴으로 테스트 데이터 중복 제거 및 고립성 강화
  • BaseDjangoTestCase 상속을 통해 공유 설정을 통합 관리함으로써 테스트 코드 재사용성 향상
  • 외부 의존성 모킹(MagicMock, patch)을 통해 테스트 환경을 완전히 제어하고, 실제 인프라에 영향 없이 안정적인 테스트 수행 가능