Книга «Изучаем Python»



Pdf көрінісі
бет134/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   130   131   132   133   134   135   136   137   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 11 • Тестирование
question()
, сохраняет ответ методом 
store_response()
и выводит результаты 
вызовом 
show_results()
.
Чтобы продемонстрировать, что класс 
AnonymousSurvey
работает, напишем про-
грамму, которая использует этот класс:
language_survey.py
from survey import AnonymousSurvey
# Определение вопроса с созданием экземпляра AnonymousSurvey.
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
# Вывод вопроса и сохранение ответов.
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
response = input("Language: ")
if response == 'q':
break
my_survey.store_response(response)
# Вывод результатов опроса.
print("\nThank you to everyone who participated in the survey!")
my_survey.show_results()
Программа определяет вопрос и создает объект 
AnonymousSurvey
на базе этого во-
проса. Программа вызывает метод 
show_question()
для вывода вопроса, после чего 
переходит к получению ответов. Каждый ответ сохраняется сразу же при получе-
нии. Когда ввод ответов был завершен (пользователь ввел 
q
), метод 
show_results()
выводит результаты опроса:
What language did you first learn to speak?
Enter 'q' at any time to quit.
Language: 
English
Language: 
Spanish
Language: 
English
Language: 
Mandarin
Language: 
q
Thank you to everyone who participated in the survey! 
Survey results: 
- English 
- Spanish 
- English
- Mandarin
Этот класс работает для простого анонимного опроса. Но допустим, вы решили 
усовершенствовать класс 
AnonymousSurvey
и модуль 
survey
, в котором он находит-
ся. Например, каждому пользователю будет разрешено ввести несколько ответов. 
Или вы напишете метод, который будет выводить только уникальные ответы 
и сообщать, сколько раз был дан тот или иной ответ. Или вы напишете другой класс 
для проведения неанонимных опросов.


Тестирование класса
219
Реализация таких изменений грозит повлиять на текущее поведение класса 
AnonymousSurvey
. Например, может оказаться, что поддержка ввода нескольких 
ответов случайно повлияет на процесс обработки одиночных ответов. Чтобы га-
рантировать, что доработка модуля не нарушит существующего поведения, для 
класса нужно написать тесты.
Тестирование класса AnonymousSurvey
Напишем тест, проверяющий всего один аспект поведения 
AnonymousSurvey
. Этот 
тест будет проверять, что один ответ на опрос сохраняется правильно. После того 
как метод будет сохранен, метод 
assertIn()
проверяет, что он действительно на-
ходится в списке ответов:
test_survey.py
import unittest
from survey import AnonymousSurvey
 
class TestAnonmyousSurvey(unittest.TestCase):
"""Тесты для класса AnonymousSurvey"""
 
def test_store_single_response(self):
"""Проверяет, что один ответ сохранен правильно."""
question = "What language did you first learn to speak?"
 
my_survey = AnonymousSurvey(question)
my_survey.store_response('English')
 
self.assertIn('English', my_survey.responses)
unittest.main()
Программа начинается с импортирования модуля 
unittest
и тестируемого класса 
AnonymousSurvey
. Тестовый сценарий 
TestAnonymousSurvey
, как и в предыдущих 
случаях, наследует от 
unittest.TestCase

. Первый тестовый метод проверяет, что 
сохраненный ответ действительно попадает в список ответов опроса. Этому методу 
присваивается хорошее содержательное имя 
test_store_single_response()


Если тест не проходит, имя метода в выходных данных сбойного теста ясно пока-
зывает, что проблема связана с сохранением отдельного ответа на опрос.
Чтобы протестировать поведение класса, необходимо создать экземпляр класса. 
В точке 

создается экземпляр с именем 
my_survey
для вопроса 
"What
language
did
you
first
learn
to
speak?"
, Один ответ (
English
) сохраняется с использова-
нием метода 
store_response()
. Затем программа убеждается в том, что ответ был 
сохранен правильно; для этого она проверяет, что значение 
English
присутствует 
в списке 
my_survey.responses

.
При запуске программы 
test_survey .py
тест проходит успешно:

---------------------------------------------------------------------- 
Ran 1 test in 0.001s 
OK


220

Достарыңызбен бөлісу:
1   ...   130   131   132   133   134   135   136   137   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет