Computer Science/Web

[Django] 장고 튜토리얼(5), 간단한 설문조사(Polls) 어플리케이션

hyunjin 2021. 5. 29. 00:36

자동화된 테스트

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

  • 시간절약 : 수동 테스트 작업을 자동화된 테스트가 한다면 시간을 많이 아낄 수 있다.
  • 문제예방 : 잘못된 부분을 미리 알려준다.
  • 코드를 더 매력적으로 만든다. : 다른 개발자들이 소프트웨어 사용하는 것을 고려하기 전에 테스트 코드를 보기를 원함.
  • 팀이 같이 일할 때 좋음

테스트 작성

1. 버그 식별하기

Question.was_published_recently() 메소드는 Question이 어제 게시된 경우 True를 반환(올바른 동작)할 뿐만 아니라 Question의 pub_date 필드가 미래로 설정되어 있을 때도 그렇습니다(틀린 동작).

미래는 최근이 아니라 True가 오면 안된다.

 

2. 버그를 노출하는 테스트 만들기

 방금 수행한 작업은 자동화된 테스트에서 수행할 수 있는 작업이라고 한다. 그래서 자동화된 테스트로 바꾼다고 한다.

애플리케이션 테스트는 일반적으로 애플리케이션의 tests.py 파일에 있다!

polls/tests.py

3.테스트 실행

python3 manage.py test polls를 이용하여 테스트 실행

어디서 테스트가 실패했는지 알려준다.

4.버그수정

models.py에서 날짜가 과거에 있을 때에만 True를 반환하도록 메소드를 수정해야 한다.

polls/models.py

테스트 다시 실행해본다.

이렇게 뜬다.

 

 

보다 포괄적인 테스트

메소드의 동작을보다 포괄적으로 테스트하기 위해 동일한 클래스에 두 가지 테스트 메소드를 추가

polls/tests.py

이렇게 추가했다

 

 

뷰테스트

 pub_date필드가 미래에있는 질문 까지도 포함하여 게시합니다. 이것을 개선 해야합니다. 미래로 pub_date를 설정하는 것은 그 시기가 되면 질문이 게시되지만 그때까지는 보이지 않는 것을 의미 해야 합니다

 

shell을 연다(python3 manage.py shell)

 response의 추가적인 속성을 사용할수 있게 하기위해서 setup_test_environment()를 사용하여 템플릿 렌더러를 설치

settings.py의 TIME_ZONE이 올바르지 않으면 예기치 않은 결과가 발생할 수 있습니다. 초기에 어떻게 설정해놨는지 기억나지 않는다면 진행하기 전에 먼저 확인해야함.

테스트 클라이언트 클래스를 import해야함.

이제 일을 시켜야한다.

뷰 개선

설문 조사 목록에는 아직 게시되지 않은 설문 조사 (즉, 장래에 pub_date가 있는 설문 조사)가 표시됩니다. 그것을 수정합시다.

polls/views.py

get_queryset 메소드를 수정해야한다.

이렇게 수정했다.

 

새로운 뷰 테스트

polls/tests.py에

from django.urls import reverse를 추가

복붙..

 

DetailView 테스트하기

polls/views.py에

polls/tests.py에 

이렇게 추가했다.

 

테스트는 많이 할 수록 좋다.