ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • django 테스트DB 없이 유닛 테스트하기
    Django testing 2021. 5. 31. 15:35

    python manage.py test를 진행하면 다음과 같이 

    생각하고는 다르게 테스트 DB를 생성하고, 

     

    테스트 DB를 삭제하는 것을 확인할 수 있다.

     

     

    이렇게 매번 테스트 DB를 생성하고, 삭제를 하게 되면

    새로운 데이터에 한해서는 테스트가 가능하지만, 

    기존 DB에 있는 데이터를 테스트하기 어려운 문제점이 있다.

     

    django를 만들면서 생성되는 기본 앱, 여기서는 django_testing 라는 폴더에

    test_runner.py 와 settings_test.py 두 파일을 생성한다.

     

     

    test_runner.py

    from django.test.runner import DiscoverRunner
    
    
    class TestRunner(DiscoverRunner):
    
        def setup_databases(self, **kwargs):
            """ Creates the test databases by calling setup_databases(). """
            pass
    
        def teardown_databases(self, old_config, **kwargs):
            """ Destroys the test databases, restoring pre-test conditions by calling teardown_databases(). """
            pass
    

     

    test_runner.py 파일에는 장고 유닛 테스트에서 사용되는 runner를 재정의하는 클래스인 TestRunner 를 정의한다.

    TestRunner 클래스가 상속받는 DiscoverRunner 클래스가 바로 테스트 DB 를 생성을 담당하는 클래스이다.

    새롭게 정의한 TestRunner 에서 위의 세 메서드를 재정의하여 비어두면, 테스트 시 테스트 DB 의 생성이 없어도 테스트가 가능하다.

     

    settings_test.py

     

    from django_testing.settings import *
    
    TEST_RUNNER = 'django_testing.test_runner.TestRunner'
    

     

    해당 파일은 장고 settings 에서 기본 세팅은 그대로 가져온 후,

    TEST_RUNNER 를 새로 만든 TestRunner 클래스로 사용하도록 하는 것이다.

     

    이렇게 지정 후,

    기존에는 

    python manage.py test --verbosity 2

    처럼 사용하지만,

     

    이 설정을 사용하기 위해서는 다음과 같이 변경한다.

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

     

    그러면,  다음 스크린샷 처럼 verbosity를 최고 단계인 3으로 지정해도 test DB가 생성되고 삭제되지 않는 것을 확인 할 수 있다.

     

     

    참조 사이트

    'Django testing' 카테고리의 다른 글

    Github Action으로 django test 하기(CI)  (0) 2021.06.04
    Django 기본 view 테스트  (0) 2021.06.02
    파이썬 TestCase, unit test 사용하기  (1) 2021.05.31
    Testing 의 시작과 종류  (0) 2021.05.31
Designed by Tistory.