Тестирование класса AnonymousSurvey

We use cookies. Read the Privacy and Cookie Policy

Напишем тест, проверяющий всего один аспект поведения AnonymousSurvey. Этот тест будет проверять, что один ответ на опрос сохраняется правильно. После того как метод будет сохранен, метод assertIn() проверяет, что он действительно находится в списке ответов:

test_survey.py

import unittest

from survey import AnonymousSurvey

(1) class TestAnonmyousSurvey(unittest.TestCase):

. ."""Тесты для класса AnonymousSurvey"""

. .

(2) . .def test_store_single_response(self):

. . . ."""Проверяет, что один ответ сохранен правильно."""

. . . .question = "What language did you first learn to speak?"

(3) . . . .my_survey = AnonymousSurvey(question)

. . . .my_survey.store_response('English')

. . . .

(4) . . . .self.assertIn('English', my_survey.responses)

unittest.main()

Программа начинается с импортирования модуля unittest и тестируемого класса AnonymousSurvey. Тестовый сценарий TestAnonymousSurvey, как и в предыдущих случаях, наследует от unittest.TestCase (1) . Первый тестовый метод проверяет, что сохраненный ответ действительно попадает в список ответов опроса. Этому методу присваивается хорошее содержательное имя test_store_single_response() (2). Если тест не проходит, имя метода в выходных данных сбойного теста ясно показывает, что проблема связана с сохранением отдельного ответа на опрос.

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

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

.

----------------------------------------------------------------------

Ran 1 test in 0.001s

OK

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

(1) . . . .responses = ['English', 'Spanish', 'Mandarin']

. . . .for response in responses:

. . . . . .my_survey.store_response(response)

. . . . . .

(2) . . . .for response in responses:

. . . . . .self.assertIn(response, my_survey.responses)

unittest.main()

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

Если снова запустить test_survey.py, оба теста (для одного ответа и для трех ответов) проходят успешно:

..

----------------------------------------------------------------------

Ran 2 tests in 0.000s

OK

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