확장성과 유지보수성 있는 Django 단위 테스트 작성 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Django 개발자 및 테스트 엔지니어 (중간~고급 난이도)
핵심 요약
BaseMapFactory
와ConstantModelMap
을 통해 테스트 데이터를 모듈화하고 중복 제거 (DRY)@patch
및MagicMock
을 활용한 외부 의존성 모킹으로 테스트 고립성 확보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.TestCase
와Client()
를 통한 HTTP 요청 시뮬레이션unittest.mock.patch
로 외부 API, DB, 파일 시스템 호출 방지SimpleUploadedFile
및openpyxl
을 통한 파일 업로드 테스트 지원
결론
BaseMapFactory
와@patch
를 결합한 패턴으로 테스트 데이터 중복 제거 및 고립성 강화BaseDjangoTestCase
상속을 통해 공유 설정을 통합 관리함으로써 테스트 코드 재사용성 향상- 외부 의존성 모킹(
MagicMock
,patch
)을 통해 테스트 환경을 완전히 제어하고, 실제 인프라에 영향 없이 안정적인 테스트 수행 가능