티스토리 뷰

728x90
반응형

첫 번째 장고 앱 작성하기, part 5 를 따라해본 것을 기록 ⛷

polls 앱을 만들었는데 여기에 자동화된 테스트를 작성할 것입니다.

 

자동화된 테스트

 

자동화된 테스트란 무엇일까요 -? 

이전 튜토리얼 2장에서 shell 을 사용하여 메소드의 동작을 검사하거나 애플리케이션을 실행하고 어떻게 작동하는지 확인하기 위해 데이터를 입력해서 테스트했습니다. 이것은 우리 손으로 직접 돌린 수동 테스트입니다.

 

반면 자동화된 테스트란 시스템에서 테스트를 돌려주는 것입니다.

한 번 테스트 세트를 작성한 이후에는 앱을 변경할 때 수동 테스트를 수행하지 않아도 원래 의도대로 코드가 작동하는지 확인할 수 있습니다.

 

==> 튜토리얼의 설명을 요약하자면, 일일이 shell에 찍어보지 않아도 테스트들을 작성해두면 아래의 명령어로 변경사항을 만들고 잘 돌아가나 궁금할 때 한번에 돌려볼수있다!!! 입니다. 

python manage.py test 앱이름

 

 

테스트를 위해 모델에 was_published_recently 함수 추가하기 

 

이 테스트에서 Question모델의 was_published_recently 함수를 쓰네요 

튜토리얼 2장에 나왔는데, 안만들어줘서 지금 모델에 저 함수를 추가해보겠습니다...!! 

 

 

 

 

 

timezone.now()는 현재 시간을 의마하고

datetime.timedelta(days=1)은 1일을 뜻합니다.

 

timedelta 는 보통 이런식으르 쓰인다고 합니다 

 

https://docs.python.org/3.6/library/datetime.html#timedelta-objects

 

그래서 추가한 코드는 

pub_date가 지금으로부터 하루 전 이라면 최근에 발행되었다! 라고 true값을 주고 아니면 false값을 주는 코드입니다. 

 

 

 

버그 확인하기

 

우리가 추가한 코드에는 버그가 있습니다.

Question.was_published_recently() 메소드는 

Question pub_date 필드가 미래로 설정되어 있을 때도 true를 반환합니다 (틀린 동작) 😱

 

 

쉘을 사용하여 버그를 확인해보겠습니다

지금으로부터 30일 후로 pub_date 를 설정해도 was_published_recently() 메소드가 true를 주네요...!! 

 

 

자동화된 테스트 만들기

 

방금 shell에서 작성했던 코드를 자동화된 테스트로 바꾸겠습니다.

polls > tests.py 에 테스트를 작성할 것 입니다. 

테스트 클래스는  django.test.TestCase 의 하위 클래스로 생성합니다. 

 

 

그리고 터미널에서 테스트를 실행해봅니다. 

 

python manage.py test polls

 

 

 

 

버그 수정하기

 

pub_date가 미래라면 false를 반환하도록 아래와 같이 코드를 바꿔주세요

 

그리고 테스트를 다시 돌려보면 통과합니다! 

 

 

그리고 미래뿐만 아니라 과거, 최근의 pud_date 까지 테스트 하기 위해서 메소드 두개를  더 추가해주세요

 

 

테스트를 돌려보면 추가한 테스트들도 다 성공이라고 나옵니다..!! 

 

 

 

이제 우리는 Question.was_published_recently()가 과거, 최근, 미래의 Question에 대해 올바른 값을 반환한다는걸

확인시켜주는 세가지 테스트를 가지게 되었습니다..!! 😎

반응형
댓글