TIL 2021/4/12 : Django에서 유닛 테스트하기

Ji_min·2021년 4월 13일
0

Today I Learnt

목록 보기
3/3

pytest로만 테스트를 하다가 이번에 장고를 써보게 되면서 내장된 test 모듈을 사용할 수 있다는 것을 알게 되었다. unittest의 testcase를 상속받아 사용하는 장고의 test 모듈과 pytest를 각각 사용해서 테스트 코드를 짜봤는데, 두 방법 다 사용하기 어렵지 않아서 취향에 맞는 것을 골라 쓰면 될 것 같다.


1. 장고 testcase 모듈 사용

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() 메소드와 똑같은 역할을 하는 메소드

2. pytest 사용

1) 설치하기

pip install pytest-django

2) pytest.ini 파일 생성하기

# 장고 프로젝트와 pytest 모듈을 연결하는 작업
# 프로젝트 루트에 pytest.ini 파일 생성한 후 다음 내용 추가하기
[pytest]
DJANGO_SETTINGS_MODULE = project_name.settings
python_files = tests.py test_*.py

3) 테스트 코드 작성하기

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/

profile
Curious Libertine

0개의 댓글