본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 2. · 14 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)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.