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



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


Глава 11 • Тестирование
Неплохо, но опрос с одним ответом вряд ли можно назвать полезным. Убедимся 
в том, что три ответа сохраняются правильно. Для этого в 
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)
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
содержит метод 


Тестирование класса
221
setUp()
, который позволяет создать эти объекты один раз, а затем использовать их 
в каждом из тестовых методов. Если в класс 
TestCase
включается метод 
setUp()

Python выполняет метод 
setUp()
перед запуском каждого метода, имя которого на-
чинается с 
test_
. Все объекты, созданные методом 
setUp()
, становятся доступными 
во всех написанных вами тестовых методах.
Используем 
setUp()
для создания экземпляра 
AnonymousSurvey
и набора ответов, 
которые могут использоваться в 
test_store_single_response()
и 
test_store_
three_responses()
:
import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
"""Тесты для класса AnonymousSurvey."""
def setUp(self):
"""
Создание опроса и набора ответов для всех тестовых методов.
"""
question = "What language did you first learn to speak?"
 
self.my_survey = AnonymousSurvey(question)
 
self.responses = ['English', 'Spanish', 'Mandarin']
def test_store_single_response(self):
"""Проверяет, что один ответ сохранен правильно."""
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
"""Проверяет, что три ответа были сохранены правильно."""
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)
unittest.main()
Метод 
setUp()
решает две задачи: он создает экземпляр опроса 

и список отве-
тов 

. Каждый из этих атрибутов снабжается префиксом 
self
, поэтому он может 
использоваться где угодно в классе. Это обстоятельство упрощает два тестовых 
метода, потому что им уже не нужно создавать экземпляр опроса или ответы. 
Метод 
test_store_single_response()
убеждается в том, что первый ответ в 
self.
responses
— 
self.responses[0]
— сохранен правильно, а метод 
test_store_single_
response()
убеждается в том, что правильно были сохранены все три ответа в 
self.
responses
.
При повторном запуске 
test_survey .py
оба теста по-прежнему проходят. Эти тесты 
будут особенно полезными при расширении 
AnonymousSurvey
с поддержкой не-
скольких ответов для каждого участника. После внесения изменений вы можете 
повторить тесты и убедиться в том, что изменения не повлияли на возможность 
сохранения отдельного ответа или серии ответов.


222

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




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

    Басты бет