장고에서 테스트하기

장고는 인빌트(inbuilt) 단위 테스트 기능을 제공한다.

단위 테스트

응용 프로그램의 개별 단위가 자신이 원하는 대로 수행되는지 테스트하는 소프트웨어 테스트 프로세스이다.

올바른 값을 반환하는지 여부와 무효한 데이터를 처리하는 방법 등을 테스트 할 수 있다.

단위 테스트는 4 가지 기본 개념이 있다.

  • 테스트 픽스처(test fixture): 테스트를 수행하는 데 필요한 설정. 데이터베이스, 샘플 데이터 세트 및 서버 설정이 포함될 수 있다.
  • 테스트 케이스(test case): 테스트의 기본단위
  • 테스트 수트(test suite): 그룹으로 실행되는 테스트 케이스, 또는 다른 테스트 수트의 수
  • 테스트 러너(test runner): 테스트 실행을 제어하고 테스트 결과를 사용자에게 다시 제공하는 프로그램.

자동 테스트

테스트는 응용 프로그램 개발의 일반적인 부분이지만, 자동화된 테스트에서는 테스트 작업이 시스템에서 수행된다는 점이다르다. 한 번 테스트 세트 작성후, 앱을 변경하면서 시간이 오래 걸리는 수동 테스트를 수행하지 않아도 원래 의도대로 코드가 작동하는지 확인할 수 있다.

왜 테스트해야 하는가?

간단한 프로그램은 자동화된 테스트를 만드는 방법을 알 필요가 없다. 하지만 복잡한 프로젝트에서는 필요하다. 자동화 테스트는 다음과 같은 일을 한다.

  • 시간 절약: 큰 응용 프로그램의 구성 요소 사이에 무수한 복잡한 상호작용을 수동으로 테스트하는 것은 시간 소모적이며, 오류가 발생하기 쉽다. 자동화된 테스트를 통해 시간을 절약할 수 있다.
  • 문제 예방: 테스트는 코드의 내부 동작을 강조하므로 문제가 발생한 부분을 확인할 수 있다.
  • 전문가 보기: 전문가가 테스트를 작성한다.
  • 팀워크 향상: 테스트를 통해 실수로 동료가 코드를 손상시키지 않는다는 것을 알 수 있다.

테스트 작성하기

테스트를 위해 버그를 만들어보자.

책이 최근에 출판되었는지 여부를 확인하는 코드를 만든다.

import datetime
from django.utils import timezone

from django.db import models

# ... #

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def recent_publication(self):
        return self.publication_date >= timezone.now().date() - datetime.timedelta(we\
eks=8)
  • 날짜 계산을 위해 datetime과 django.utils의 timezone 모듈 import
  • 8주 전의 날짜를 계산하는 recent_publication이라는 Book 모델에 사용자 정의 메서드 추가
  • 책의 출판 날짜가 더 최근인 경우 true 반환

확인

shell 에서 메서드를 테스트 해보자

python manage.py shell

>>> from books.models import Book
>>> import datetime
>>> from django.utils import timezone
>>> book = Book.objects.get(id=1)
>>> book.title
'Mastering Django: Core'
>>> book.publication_date
datetime.date(2016, 5, 1)
>>>book.publication_date >= timezone.now().date() - datetime.timedelta(weeks=8)
True 
김땡땡's blog

김땡땡's blog

김땡땡