name_function.py
def get_formatted_name(first, last, middle=''):
"""Строит отформатированное полное имя."""
if middle:
full_name = f"{first} {middle} {last}"
else:
full_name = f"{first} {last}"
return full_name.title()
В новой версии
get_formatted_name()
параметр
middle
необязателен. Если второе
имя передается функции, то полное имя будет содержать имя, второе имя и фами-
лию. В противном случае полное имя состоит только из имени и фамилии. Теперь
функция должна работать для обеих разновидностей имен. Чтобы узнать, работает
ли функция для имен из двух компонентов, снова запустите
test_name_function .py
:
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Теперь тестовый сценарий проходит. Такой исход идеален; он означает, что функ-
ция снова работает для имен из двух компонентов и нам не придется тестировать
функцию вручную. Исправить ошибку было несложно, потому что сбойный тест
помог выявить новый код, нарушивший существующее поведение.
228
Глава 11 • Тестирование
Добавление новых тестов
Теперь мы знаем, что
get_formatted_name()
работает для простых имен, и можем на-
писать второй тест для имен из трех компонентов. Для этого в класс
NamesTestCase
добавляется еще один метод:
test_name_function.py
...
class NamesTestCase(unittest.TestCase):
"""Тесты для 'name_function.py'."""
def test_first_last_name(self):
...
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')
if __name__ == '__main__':
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
, но можем быть уверены в том, что она сработает
и для имен с тремя компонентами, такими как
Wolfgang
Amadeus
Mozart
.
Тестирование класса
Достарыңызбен бөлісу: |