Тестирование функции
215
Теперь тестовый сценарий проходит. Такой исход идеален; он означает, что функ-
ция снова работает для имен из двух компонентов и нам не пришлось тестировать
функцию вручную. Исправить ошибку было несложно, потому что сбойный тест
помог
выявить новый код, нарушивший существующее поведение.
Добавление новых тестов
Теперь мы знаем, что
get_formatted_name()
работает для простых имен, и мо-
жем написать второй тест для имен из трех компонентов. Для этого в класс
NamesTestCase
добавляется еще один метод:
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
"""Тесты для 'name_function.py'."""
def test_first_last_name(self):
"""Работают ли
такие имена, как 'Janis Joplin'?"""
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
def test_first_last_middle_name(self):
"""Работают ли такие имена, как 'Wolfgang Amadeus Mozart'?"""
formatted_name = get_formatted_name(
'wolfgang', 'mozart', 'amadeus')
self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
unittest.main()
Новому методу присваивается имя
test_first_last_middle_name()
. Имя метода
должно начинаться с
test_
, чтобы этот метод выполнялся автоматически при запуске
test_name_function .py
. В остальном имя выбирается так, чтобы оно четко показывало,
какое именно поведение
get_formatted_name()
мы тестируем. В результате при сбое
теста вы сразу видите, к каким именам он относится. Не нужно опасаться длинных
имен методов в классах
TestCase
: имена должны быть содержательными, чтобы до-
нести информацию до разработчика в случае сбоя, а поскольку Python вызывает их
автоматически, вам никогда не придется вручную вводить эти имена при вызове.
Чтобы протестировать функцию, мы вызываем
get_formatted_name()
c тремя
компонентами
, после чего используем
assertEqual()
для проверки того, что
возвращенное полное имя совпадает с ожидаемым. При повторном запуске
test_
name_function .py
оба теста проходят успешно:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Отлично! Теперь мы знаем, что функция по-прежнему работает с именами
из двух компонентов, как
Janis
Joplin
, но можем
быть уверены в том, что она