Django testing

Django 기본 view 테스트

wangkisa 2021. 6. 2. 18:01

Django 를 개발하면서 제일 기본적인 view 를 생성하고 기본 결과를 테스트 한다.

 

TestCase 에서 제공하는 client 라는 객체를 이용해서 get, post 같은 method를 테스트 할 수 있는데,

여기서는 우선 get을 테스트할 예정이다.

 

먼저 views 파일에서 AuthorListView 클래스를 생성합니다.

 

from django.http import JsonResponse
from django.shortcuts import render
from django.views import generic

from catalog.models import Author


class AuthorListView(generic.ListView):
    model = Author
    paginate_by = 10

    def get(self, request):
        # 뷰 로직 작성
        author_list = list(Author.objects.filter().values())
        return JsonResponse(author_list, safe=False)

 

해당 클래스를 urls 에서 'catalog_list' 경로로 매칭시켜 줍니다.

 

그리고, test_views.py 를 만들어서 AuthorListViewTest 를 생성합니다.

여기서는 setUpTestData() 함수에서 객체를 13개 추가 합니다.

 

그리고, 해당 추가해 준  갯수가 해당 함수를 호출한 결과와 일치하는지 테스트 합니다.

 

import json

from django.test import TestCase

from catalog.models import Author


class AuthorListViewTest(TestCase):
    @classmethod
    def setUpTestData(cls):
        # Create 13 authors for pagination tests
        number_of_authors = 13

        for author_id in range(number_of_authors):
            Author.objects.create(
                first_name=f'Christian {author_id}',
                last_name=f'Surname {author_id}',
            )

    def test_view_url_exists_at_desired_location(self):
        response = self.client.get('/catalog/catalog_list/')
        # print(response)
        json_content = json.loads(response.content)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(14, len(json_content))
        
    def test_view_url_accessible_by_name(self):
        response = self.client.get(reverse('catalog_list'))
        self.assertEqual(response.status_code, 200)

여기서 self.assertEqual(14, len(json_content)) 이 부분을 보게 되면

추가해준 개수는 13인데, 14와 비교하는 것은 

개인 DB에 기본적인 데이터 1 를 추가했기 때문에 

13이 아닌 14와 체크를 하고 있다.

 

self.assertEqual(response.status_code, 200)

response.status_code 가 성공인 경우 200 값을 리턴하므로,

정상적인 성공 결과를 체크한다.

 

마지막 reverse('catalog_list') 를 통해서 가져온 url로 

response.status_code 가 성공인지 같이 체크한다.

 

 

python manage.py test --settings='django_testing.settings_test' --verbosity 3

로 테스트 해보게 되면 다음과 같은 결과를 확인할 수 있다.