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



Pdf көрінісі
бет115/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   111   112   113   114   115   116   117   118   ...   238
Байланысты:
2 5343781172763690906

    Бұл бет үшін навигация:
  • English
Таблица 11.1. Методы assert, предоставляемые модулем unittest

Метод

Использование

assertEqual(a, b)

Проверяет, что a == b

assertNotEqual(a, b)

Проверяет, что a != b

assertTrue(x)

Проверяет, что значение x истинно

assertFalse(x)

Проверяет, что значение x ложно

assertIn(элемент, список)

Проверяет, что элемент входит в список

assertNotIn(элемент, список)

Проверяет, что элемент не входит в список

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

Тестирование класса имеет много общего с тестированием функции — значитель-

ная часть работы направлена на тестирование поведения методов класса. Впрочем, 

существуют и различия, поэтому мы напишем отдельный класс для тестирования. 

Возьмем класс для управления проведением анонимных опросов:



survey.py

class AnonymousSurvey():

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

    


    def __init__(self, question):

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

        self.question = question

        self.responses = []

        


    def show_question(self):

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

        print(question)

        

    def store_response(self, new_response):



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

        self.responses.append(new_response)

        

    def show_results(self):



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

        print("Survey results:")

        for response in responses:

            print('- ' + response)

Класс начинается с вопроса, предоставленного администратором , и включает 

пустой список для хранения ответов. Класс содержит методы для вывода во-

проса , добавления нового ответа в список ответов  и вывода всех ответов, 

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

обходимо предоставить вопрос. После того как будет создан экземпляр, пред-

ставляющий конкретный опрос, программа выводит вопрос методом 

show_



218    Глава 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()

 проверяет, что он действительно на-

ходится в списке ответов:





Достарыңызбен бөлісу:
1   ...   111   112   113   114   115   116   117   118   ...   238




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

    Басты бет