본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 2. · 35 Views
Django 테스트 전략 완벽 가이드
Django 프로젝트의 품질을 보장하는 테스트 전략을 배워봅니다. 유닛 테스트부터 통합 테스트까지 실전 예제로 학습합니다.
들어가며
이 글에서는 Django 테스트 전략 완벽 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 기본_유닛_테스트
- 뷰_테스트하기
- Fixture_데이터_사용
- 폼_유효성_테스트
- API_엔드포인트_테스트
- 인증_테스트
- Mock_객체_활용
- 데이터베이스_쿼리_최적화_테스트
- 커스텀_매니저_테스트
- 시그널_테스트
1. 기본 유닛 테스트
개요
Django의 TestCase를 사용하여 모델의 기본 동작을 검증합니다. 데이터베이스 트랜잭션이 자동으로 롤백됩니다.
코드 예제
from django.test import TestCase
from .models import Post
class PostModelTest(TestCase):
def test_post_creation(self):
post = Post.objects.create(
title="테스트", content="내용"
)
self.assertEqual(post.title, "테스트")
설명
TestCase 클래스를 상속받아 테스트를 작성하고, assertEqual로 예상값과 실제값을 비교합니다.
2. 뷰 테스트하기
개요
Client 객체를 사용하여 HTTP 요청을 시뮬레이션하고 응답을 검증합니다. 실제 서버 없이 테스트 가능합니다.
코드 예제
from django.test import TestCase, Client
class ViewTest(TestCase):
def setUp(self):
self.client = Client()
def test_home_page(self):
response = self.client.get('/')
self.assertEqual(response.status_code, 200)
설명
setUp 메서드로 테스트 환경을 준비하고, get 메서드로 페이지 응답 상태를 확인합니다.
3. Fixture 데이터 사용
개요
테스트에 필요한 초기 데이터를 fixtures로 관리하여 재사용성을 높입니다. JSON 파일로 저장됩니다.
코드 예제
from django.test import TestCase
class PostTestWithFixture(TestCase):
fixtures = ['posts.json']
def test_post_count(self):
from .models import Post
self.assertEqual(Post.objects.count(), 5)
설명
fixtures 속성에 JSON 파일을 지정하면 테스트 실행 전 자동으로 데이터가 로드됩니다.
4. 폼 유효성 테스트
개요
폼의 유효성 검증 로직을 테스트하여 잘못된 데이터 입력을 방지합니다. 각 필드별 검증이 가능합니다.
코드 예제
from django.test import TestCase
from .forms import PostForm
class FormTest(TestCase):
def test_valid_form(self):
form = PostForm(data={
'title': '제목', 'content': '내용'
})
self.assertTrue(form.is_valid())
설명
폼에 데이터를 전달하고 is_valid() 메서드로 유효성을 검증합니다.
5. API 엔드포인트 테스트
개요
REST API의 응답 데이터와 상태 코드를 검증합니다. JSON 응답의 구조도 확인할 수 있습니다.
코드 예제
from django.test import TestCase
from rest_framework.test import APIClient
class APITest(TestCase):
def test_api_list(self):
client = APIClient()
response = client.get('/api/posts/')
self.assertEqual(response.status_code, 200)
설명
DRF의 APIClient를 사용하여 API 엔드포인트를 테스트하고 응답을 검증합니다.
6. 인증 테스트
개요
로그인이 필요한 페이지의 접근 권한을 테스트합니다. 인증된 사용자와 비인증 사용자를 구분합니다.
코드 예제
from django.test import TestCase
from django.contrib.auth.models import User
class AuthTest(TestCase):
def test_login_required(self):
user = User.objects.create_user('test', password='1234')
self.client.login(username='test', password='1234')
response = self.client.get('/profile/')
self.assertEqual(response.status_code, 200)
설명
create_user로 테스트 유저를 생성하고 login 메서드로 인증 상태를 시뮬레이션합니다.
7. Mock 객체 활용
개요
외부 API나 복잡한 의존성을 Mock으로 대체하여 격리된 테스트를 수행합니다. 실제 호출 없이 테스트 가능합니다.
코드 예제
from django.test import TestCase
from unittest.mock import patch
class MockTest(TestCase):
@patch('requests.get')
def test_external_api(self, mock_get):
mock_get.return_value.status_code = 200
# 외부 API 호출 테스트
self.assertEqual(mock_get.return_value.status_code, 200)
설명
@patch 데코레이터로 외부 의존성을 Mock으로 대체하고 예상 동작을 정의합니다.
8. 데이터베이스 쿼리 최적화 테스트
개요
쿼리 횟수를 측정하여 N+1 문제를 방지합니다. assertNumQueries로 정확한 쿼리 수를 검증합니다.
코드 예제
from django.test import TestCase
class QueryTest(TestCase):
def test_query_count(self):
from .models import Post
with self.assertNumQueries(1):
posts = list(Post.objects.all())
설명
assertNumQueries 컨텍스트 매니저로 예상 쿼리 수를 지정하고 실제 실행된 쿼리 수를 비교합니다.
9. 커스텀 매니저 테스트
개요
모델의 커스텀 매니저 메서드가 올바르게 작동하는지 검증합니다. 복잡한 쿼리 로직을 테스트합니다.
코드 예제
from django.test import TestCase
from .models import Post
class ManagerTest(TestCase):
def test_published_posts(self):
Post.objects.create(title="게시", published=True)
Post.objects.create(title="비공개", published=False)
self.assertEqual(Post.objects.published().count(), 1)
설명
커스텀 매니저의 published() 메서드가 공개된 게시물만 반환하는지 확인합니다.
10. 시그널 테스트
개요
Django 시그널이 올바른 시점에 발생하는지 테스트합니다. 모델 저장 시 자동 실행되는 로직을 검증합니다.
코드 예제
from django.test import TestCase
from django.db.models.signals import post_save
class SignalTest(TestCase):
def test_post_save_signal(self):
from .models import Post
with self.captureOnCommitCallbacks(execute=True):
post = Post.objects.create(title="테스트")
self.assertTrue(post.slug)
설명
post_save 시그널이 실행되어 자동으로 slug가 생성되는지 확인합니다. --- Django 테스트 전략 카드 뉴스가 완성되었습니다. 초급 개발자도 쉽게 따라할 수 있도록 실용적인 예제 중심으로 구성했습니다.
마치며
이번 글에서는 Django 테스트 전략 완벽 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Django #TestCase #UnitTest #Integration #Fixtures
댓글 (0)
함께 보면 좋은 카드 뉴스
vLLM 통합 완벽 가이드
대규모 언어 모델 추론을 획기적으로 가속화하는 vLLM의 설치부터 실전 서비스 구축까지 다룹니다. PagedAttention과 연속 배칭 기술로 GPU 메모리를 효율적으로 활용하는 방법을 배웁니다.
Web UI Demo 구축 완벽 가이드
Gradio를 활용하여 머신러닝 모델과 AI 서비스를 위한 웹 인터페이스를 구축하는 방법을 다룹니다. 코드 몇 줄만으로 전문적인 데모 페이지를 만들고 배포하는 과정을 초급자도 쉽게 따라할 수 있도록 설명합니다.
Sandboxing & Execution Control 완벽 가이드
AI 에이전트가 코드를 실행할 때 반드시 필요한 보안 기술인 샌드박싱과 실행 제어에 대해 알아봅니다. 격리된 환경에서 안전하게 코드를 실행하고, 악성 동작을 탐지하는 방법을 단계별로 설명합니다.
Voice Design then Clone 워크플로우 완벽 가이드
AI 음성 합성에서 일관된 캐릭터 음성을 만드는 Voice Design then Clone 워크플로우를 설명합니다. 참조 음성 생성부터 재사용 가능한 캐릭터 구축까지 실무 활용법을 다룹니다.
Tool Use 완벽 가이드 - Shell, Browser, DB 실전 활용
AI 에이전트가 외부 도구를 활용하여 셸 명령어 실행, 브라우저 자동화, 데이터베이스 접근 등을 수행하는 방법을 배웁니다. 실무에서 바로 적용할 수 있는 패턴과 베스트 프랙티스를 담았습니다.