ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개념 정리] django TestCase의 setUp과 tearDown, 그리고 setUpTestData?
    django 2022. 2. 13. 02:44

     

    # setUp 메서드란?

     : 이름에서 알 수 있듯이 test_로 시작되는 메서드들을 실행하기 전에 세팅용으로 실행하는 메서드이다. setUp을 잘 활용하면 기능들을 테스트할 때 공통으로 자주 쓰이는 데이터들을 미리 database에 생성하고 재사용이 가능해 코드 수를 줄이고 더욱 깔끔하게 코드를 구성할 수 있다.

     

    # tearDown 메서드란? 

     : tearDown은 setUp과 짝을 이루는 메서드로, 테스트 과정 중에 생긴 데이터를 제거해준다. 예를 들어 User App에서 하나의 tests에는 회원가입뿐 아니라 로그인, 팔로우 등과 같은 여러 테스트가 진행되는데, 정확한 테스트 결과를 위해서 Clean Up을 반드시 해주고 다른 테스트를 진행하는 것이 좋다.


    # setUp vs setUpTestData?

      - setUp()     

        1. 단순히 def로 선언하여 사용한다.

        2. test method 마다 실행되어 초기 데이터를 만들어준다.

        3. 테스트 메서드를 진행하면서 매번 초기화가 필요한 경우 사용하기 좋으나 그만큼 시간이 오래 걸린다.

     

     - setUpTestData()

       1. @classmethod를 붙여줘야 한다.

       2. TestCase 마다 (class 마다) 딱 1번 실행되어 초기 데이터를 만들어 준다.

       3. setUp과 달리 class마다 1번만 실행되므로 시간이 적게 걸린다.

     

     매번 세팅 데이터를 초기화해주어야 하는 경우가 아니라면 setUpTestData()를 쓸 것을 권장한다.


    # 예시 코드

      - setUp(), tearDown()

    from django.test import TestCase
    from .models import User
    
    class ExampleTest(TestCase):
    	
        def setUp(self):
        	self.test_user = User.objects.create(
            					name="이재현",
                                age="26",
                                gender="Male"
                             )
       
        def tearDown(self):
        	User.objects.all().delete()
            
        def test_one(self):
        	...
            
        def test_two(self):
        	...
            
        def test_three(self):
        	...

    위 코드의 경우 setUp()과 tearDown()은 각각 3번씩 호출된다.

     

     - setUpTestData()

    from django.test import TestCase
    from .models import User
    
    class ExampleTest(TestCase):
    	
        @classmethod
        def setUpTestData(cls):
        	cls.test_user = User.objects.create(
            					name="이재현",
                                age="26",
                                gender="Male"
                             )
              
        def test_one(self):
        	...
            
        def test_two(self):
        	...
            
        def test_three(self):
        	...

    위 코드의 경우 setUpTestData()는 ExampleTest class 통틀어 1번만 호출되며, 별도의 tearDown() 없이 클래스 내 모든 메서드가 실행되면 삭제된다.

     


    참조

    https://leffept.tistory.com/362?category=950490 

Designed by Tistory.