Python/Django

[Django] 테스트 코드

K.Seungmin 2024. 12. 23. 18:56

테스트는 코드 작동을 확인하는 루팅입니다.

테스트를 만들어야하는 이유

  • 테스트를 통해 시간 절약 가능
    • 특정 조건에서 발생하는 오류에 도달하는 과정을 요약할 수 있음
  • 오류 예방 가능
  • 코드의 최적화

 

Django에서 test 자동화하기

다음은 현재 작성한 코드에서 발생하는 오류를 shell을 통해 확인하는 과정입니다.

>>> import datetime
>>> from django.utils import timezone
>>> from polls.models import Question
>>> future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
>>> future_question.was_published_recently()
True

미래 시간을 넣어도 함수가 True를 리턴하는 것을 확인할 수 있습니다. Django에서는 이런 테스트를 자동화할 수 있습니다. 일반적으로 애플리케이션 테스트는 애플리케이션의 tests.py 파일에 있습니다. 테스트 시스템은 test로 시작하는 파일에서 테스트를 자동으로 찾습니다. 다음은 tests.py 파일 예시입니다.

import datetime

from django.test import TestCase
from django.utils import timezone

from .models import Question


class QuestionModelTests(TestCase):
    def test_was_published_recently_with_future_question(self):
        time = timezone.now() + datetime.timedelta(days=30)
        future_question = Question(pub_date=time)
        self.assertIs(future_question.was_published_recently(), False)

QuestionModelTests 함수를 통해서 test를 진행합니다. 위에서 shell에 입력했던 것과 같이 코드를 작성해 주고 원하는 값이 들어갔을 때 assertIs를 통해 False 값이 출력되는지 확인합니다. 위 테스트를 실행하는 방법은 다음 코드와 같습니다.

python manage.py test polls

 

테스트에서 주로 사용하는 함수

  • assertEqual(a, b): 두 값이 같은지 확인.
  • assertNotEqual(a, b): 두 값이 다른지 확인.
  • assertTrue(x): 값이 True인지 확인.
  • assertFalse(x): 값이 False인지 확인.
  • assertIn(a, b): 값 a가 시퀀스 b에 포함되어 있는지 확인.
  • assertNotIn(a, b): 값 a가 시퀀스 b에 포함되어 있지 않은지 확인.
  • assertIs(a, b) : assertEqual과 유사하지만 완전히 동일한 객체인지 확인.

 

 

'Python > Django' 카테고리의 다른 글

[Django] pep 8 코드 스타일  (0) 2024.12.23
[Django] 뷰(View) 종류  (1) 2024.12.22
[Django] render 함수와 get_object_or_404 함수  (0) 2024.12.20
[Django] Model과 Field  (0) 2024.12.17
[Django] 관리자 관련  (0) 2024.12.17