SW개발/Django

[Django]setUp() vs setUpTestData() 차이점

Django에서 unittest를 진행할 때 초기 데이터들을 설정하기 위해서는 다음과 같은 메소드가 사용될 수 있다.

  • setUp()
  • setUpTestData()

https://docs.djangoproject.com/en/3.1/topics/testing/tools/#testcase

 

Testing tools | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

겉으로 보기에 두 함수는 동일한 역할을 한다. 하지만 동작하는 원리와 방식에서는 약간의 차이가 있다.

먼저, 사용방법을 간단하게 소개한다.

# tests.py

from django.test import TestCase
from rest_framework.test import APIClient

class ExampleTest(TestCase):
    def setUp(self):
        # 테스트를 시작하기전 여러가지를 함
        print(f'-------{self._testMethodName}-------')
        self.client = APIClient()
    
    @classmethod
    def setUpTestData(cls):
    	# 테스트를 시작하기전 여러가지를 함
        leffe = Leffe.objects.create(title='leffe tistory')
        
    def test_leffe_title(self):
        # ~~ 다양한 테스트
        pass

setUp()의 경우 단순한 def로 선언하여 사용하면 되고, setUpTestData()의 경우 classmethod로 선언하여 사용하면 된다.

이 때, 둘의 차이점은 setUp()테스트 메소드마다 실행된다는 것이고, setUpTestData()클래스 내에서 초기에 딱 1번 실행되는 차이이다. 

 

따라서, 테스트를 진행하면서 매번 초기화 같은 것이 필요한 경우에는 setUp(), 그렇지 않고 1번의 초기화만 필요할 경우에는 setUpTestData()를 사용하면 된다. 매번 초기화를 진행하면 테스트 코드를 돌리는데 시간이 오래걸리므로 주의하여야 한다.

 

추후에 Django에서 테스트를 작성하는 법을 다뤄볼 것이다.

 

728x90