-
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