티스토리 뷰
첫 번째 장고 앱 작성하기, 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 는 보통 이런식으르 쓰인다고 합니다
그래서 추가한 코드는
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에 대해 올바른 값을 반환한다는걸
확인시켜주는 세가지 테스트를 가지게 되었습니다..!! 😎
'🐍 > Django' 카테고리의 다른 글
[Django] 튜토리얼 part 6 - 정적 파일 (0) | 2020.02.29 |
---|---|
[Django] 튜토리얼 part 5 (2) - 뷰 테스트 작성하기 (0) | 2020.02.22 |
[Django] Github User API를 사용하여 User 정보 보여주기 (0) | 2020.02.16 |
[Django] HTTP Request를 받아서 응답해주기 (GET, POST, PUT, DELETE) (1) | 2020.02.16 |
[Django] 튜토리얼 part 4 (2) - Generic view 사용하기 (0) | 2020.02.15 |
- Total
- Today
- Yesterday
- flutter deep link
- Sketch 누끼
- PencilKit
- ribs
- ipad multitasking
- 장고 Custom Management Command
- Python Type Hint
- 플러터 싱글톤
- Flutter Clipboard
- Flutter 로딩
- flutter 앱 출시
- METAL
- DRF APIException
- Flutter getter setter
- Flutter Text Gradient
- Dart Factory
- 장고 URL querystring
- Flutter Spacer
- 구글 Geocoding API
- SerializerMethodField
- Watch App for iOS App vs Watch App
- flutter dynamic link
- 플러터 얼럿
- Django FCM
- cocoapod
- Django Heroku Scheduler
- github actions
- drf custom error
- flutter build mode
- Django Firebase Cloud Messaging
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |