pytest로만 테스트를 하다가 이번에 장고를 써보게 되면서 내장된 test 모듈을 사용할 수 있다는 것을 알게 되었다. unittest의 testcase를 상속받아 사용하는 장고의 test 모듈과 pytest를 각각 사용해서 테스트 코드를 짜봤는데, 두 방법 다 사용하기 어렵지 않아서 취향에 맞는 것을 골라 쓰면 될 것 같다.
from django.test import TestCase
from .models import Animal
class AnimalTestCase(TestCase):
def setUp(self):
Animal.objects.create(name='Cat', sound='Mw')
def test_roar(self):
cat = Animal.objects.get(pk=1)
self.assertEqual(cat.roar(), 'Cat cries Mw')
cmd : $ python manage.py test
특정 모듈만 테스트하기 : python3 manage.py test app.file.TestCaseSubClass.test_module
c.f
setUp() 메소드 : init() 메소드와 똑같은 역할을 하는 메소드
pip install pytest-django
# 장고 프로젝트와 pytest 모듈을 연결하는 작업
# 프로젝트 루트에 pytest.ini 파일 생성한 후 다음 내용 추가하기
[pytest]
DJANGO_SETTINGS_MODULE = project_name.settings
python_files = tests.py test_*.py
import pytest
from .models import Animal
# 테스트 db로부터 데이터를 가져오기 위한 데코레이터 추가
@pytest.mark.django_db
def test_roar():
Animal.objects.create(name='Cat', sound='Mw')
cat = Animal.objects.get(pk=1)
assert cat.roar() == 'Cat cries Mw'
cmd : pytest
더 디테일하게 알고 싶을 때 : pytest -svv
특정 함수만 테스트하고 싶을 때 : pytest -k func_name
testcase를 상속받아서 사용하는 쪽이 코드를 더 깔끔하게 짤 수 있는 것 같은데, 아직은 pytest의 -svv 옵션을 통해 테스트 결과를 확인하는 게 더 자세해서 pytest로 쓰고 있다. unittest의 명령어는 아직 더 살펴봐야겠다.
https://docs.djangoproject.com/en/3.1/topics/testing/overview/