티스토리 뷰
728x90
반응형
테스트 드리븐 개발(TDD)은 요구사항을 명확히 하고 안정적인 코드를 작성하는 개발 방법이다.
제일 먼저 예상되는 동작에 대한 테스트 코드를 작성하고, 구체적으로 기능을 구현하는 것이다.
장고에서는 테스트 드리븐 개발(TDD)을 쉽게 할 수 있도록 지원하고 있다.
기본적인 장고의 TDD 개발 과정에 대해 뷰 테스트를 예를 들어 설명하려 한다.
1. 테스트 계획 및 작성
- 요구사항을 정리하여 개발해야하는 기능을 계획한다.
- 요구사항에 맞는 테스트 코드를 작성한다.
- 장고에서는 TestCase 클래스를 상속받아 사용자 정의 테스트 코드를 작성할 수 있다.
- 아래 코드는 도서 데이터를 가져오는 API를 테스트하는 예제이다.
# api/test.py
from django.test import TestCase
from rest_framework.test import APIClient
from rest_framework import status
from .models import Book
class BookViewTest(TestCase):
def setUp(self):
self.client = APIClient() # API 클라이언트를 불러오기
book_data = {
"title": "test_title",
"introduction": "this is introduction",
"author": "test_author",
}
self.book = Book.objects.create(**book_data) # 임의의 책 데이터 생성
def test_get_book_list(self):
response = self.client.get('/api/book/') # GET 요청으로 데이터 리스트 가져오기
self.assertEqual(response.status_code, status.HTTP_200_OK) # 응답 코드가 200인지 확인
2. 테스트 실행
- 테스트가 실패하는지 확인한다. TDD 원칙에 따라 처음에는 테스트가 실패하는 것이 정상이다.
python manage.py test
3. 기능 구현
- 테스트를 통과하기 위해 필요한 기능을 구현한다. 여기서는 Book모델에 대한 시리얼라이저와 뷰, URL을 작성한다.
# api/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ["id","title","introduction","author"]
# api/views.py
from rest_framework import viewsets
from .serializers import BookSerializer
from .models import Book
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
# api/urls.py
from django.urls import path
from rest_framework import routers
from .views import BookViewSet
router = routers.SimpleRouter()
router.register("book",BookViewSet)
urlpatterns = router.urls
# mybook/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls')),
]
4. 테스트 재실행
- 테스트를 다시 실행하여 잘 통과하는지 확인한다.
- 기능 코드가 정상적으로 동작하면 테스트가 성공할 것이다.
python manage.py test
5. 리팩토링
- 코드의 중복을 제거하거나 더 나은 구조로 리팩터링 하는 과정을 거친다.
- 리팩토링을 한 이후에도 테스트를 통과하는지 확인해야 한다.
6. 반복
- 다음 기능을 개발하기 위해 다시 테스트를 작성하는 것부터 과정을 반복한다.
728x90
반응형
댓글