Класс для тестирования

We use cookies. Read the Privacy and Cookie Policy

Тестирование класса имеет много общего с тестированием функции — значительная часть работы направлена на тестирование поведения методов класса. Впрочем, существуют и различия, поэтому мы напишем отдельный класс для тестирования. Возьмем класс для управления проведением анонимных опросов:

survey.py

class AnonymousSurvey():

. ."""Сбор анонимных ответов на опросы."""

. .

(1) . .def __init__(self, question):

. . . ."""Сохраняет вопрос и готовится к сохранению ответов."""

. . . .self.question = question

. . . .self.responses = []

. . . .

(2) . .def show_question(self):

. . . ."""Выводит вопрос."""

. . . .print(question)

. . . .

(3) . .def store_response(self, new_response):

. . . ."""Сохраняет один ответ на опрос."""

. . . .self.responses.append(new_response)

. . . .

(4) . .def show_results(self):

. . . ."""Выводит все полученные ответы."""

. . . .print("Survey results:")

. . . .for response in responses:

. . . . . .print('- ' + response)

Класс начинается с вопроса, предоставленного администратором (1) , и включает пустой список для хранения ответов. Класс содержит методы для вывода во­проса (2), добавления нового ответа в список ответов (3) и вывода всех ответов, хранящихся в списке (4). Чтобы создать экземпляр на основе этого класса, необходимо предоставить вопрос. После того как будет создан экземпляр, представляющий конкретный опрос, программа выводит вопрос методом show_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. ")

while True:

. .response = input("Language: ")

. .if response == 'q':

. . . .break

. .my_survey.store_response(response)

# Вывод результатов опроса.

print(" Thank 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, в котором он находится. Например, каждому пользователю будет разрешено ввести несколько ответов. Или вы напишете метод, который будет выводить только уникальные ответы и ­сообщать, сколько раз был дан тот или иной ответ. Или вы напишете другой класс для проведения неанонимных опросов.

Реализация таких изменений грозит повлиять на текущее поведение класса AnonymousSurvey. Например, может оказаться, что поддержка ввода нескольких ответов случайно повлияет на процесс обработки одиночных ответов. Чтобы гарантировать, что доработка модуля не нарушит существующего поведения, для класса нужно написать тесты.