티스토리 뷰

카테고리 없음

[Django] TDD 개발 과정

코딩하는 앤지 2024. 11. 18.
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
반응형
댓글