М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет170/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   166   167   168   169   170   171   172   173   ...   334
Байланысты:
Изучаем Python


Глава 11 • Тестирование
Реализация таких изменений грозит повлиять на текущее поведение класса 
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)
if __name__ == '__main__':
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


Тестирование класса
233
Неплохо, но опрос с одним ответом вряд ли можно назвать полезным. Убедимся 
в том, что три ответа сохраняются правильно. Для этого в 
TestAnonymousSurvey
добавляется еще один метод:
import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
"""Тесты для класса AnonymousSurvey"""
def test_store_single_response(self):
...
def test_store_three_responses(self):
"""Проверяет, что три ответа были сохранены правильно."""
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)

responses = ['English', 'Spanish', 'Mandarin']
for response in responses:
my_survey.store_response(response)

for response in responses:
self.assertIn(response, my_survey.responses)
if __name__ == '__main__':
unittest.main()
Новому методу присваивается имя 
test_store_three_responses()
. Мы создаем 
объект опроса по аналогии с тем, как это делалось в 
test_store_single_response()

Затем определяется список, содержащий три разных ответа 

, и для каждого из 
этих ответов вызывается метод 
store_response()
. После того как ответы будут 
сохранены, следующий цикл проверяет, что каждый ответ теперь присутствует 
в 
my_survey.responses

.
Если снова запустить 
test_survey .py
, оба теста (для одного ответа и для трех ответов) 
проходят успешно:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Все прекрасно работает. Тем не менее тесты выглядят немного однообразно, по-
этому мы воспользуемся еще одной возможностью 
unittest
для повышения их 
эффективности.
Метод setUp()
В программе 
test_survey .py
в каждом тестовом методе создавался новый экземпляр 
AnonymousSurvey
, а также новые ответы. Класс 
unittest.TestCase
содержит метод 


234

Достарыңызбен бөлісу:
1   ...   166   167   168   169   170   171   172   173   ...   334




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

    Басты бет