ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django 기본 view 테스트
    Django testing 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

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

     

     

Designed by Tistory.