Тестирование
функции
213
Точка в первой строке вывода сообщает, что один тест прошел успешно. Следу-
ющая строка говорит, что для выполнения одного теста Python потребовалось
менее 0,001 секунды. Наконец, завершающее сообщение
OK
говорит о том, что все
модульные тесты в тестовом сценарии прошли.
Этот результат показывает, что функция
get_formatted_name()
успешно работает
для полных имен, состоящих из имени и фамилии, если только функция не была
изменена. В случае внесения изменений в
get_formatted_name()
тест можно запу-
стить снова. И если тестовый сценарий снова пройдет, мы будем знать, что функция
продолжает успешно работать с полными именами из двух компонентов.
Сбой теста
Как выглядит сбойный тест? Попробуем изменить функцию
get_formatted_name()
,
чтобы она работала со вторыми именами, — но сделаем это так, чтобы она перестала
работать с полными именами из двух компонентов.
Новая версия
get_formatted_name()
с дополнительным аргументом второго имени
выглядит так:
name_function.py
def get_formatted_name(first, middle, last):
"""Строит отформатированное полное имя."""
full_name = first + ' ' + middle + ' ' + last
return full_name.title()
Эта версия должна работать для полных имен из трех компонентов, но тестирова-
ние показывает, что она перестала работать для полных имен из двух компонентов.
На
этот раз файл
test_name_function .py
выдает следующий результат:
E
======================================================================
ERROR: test_first_last_name (__main__.NamesTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_name_function.py", line 8, in test_first_last_name
formatted_name = get_formatted_name('janis', 'joplin')
TypeError: get_formatted_name() missing 1 required positional argument: 'last'
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
На этот раз информации гораздо больше, потому что при сбое теста разработчик
должен знать, почему это произошло. Вывод начинается с одной буквы E
, которая
сообщает, что один модульный тест в тестовом сценарии привел к ошибке. Затем мы
видим, что ошибка произошла в тесте
test_first_last_name()
в
NamesTestCase
.
Конкретная информация о сбойном тесте особенно важна в том случае, если тестовый
сценарий состоит из нескольких модульных тестов. В точке
мы видим стандартную
трассировку, из которой понятно, что вызов функции
get_formatted_name('janis',
'joplin')
перестал работать из-за необходимого позиционного аргумента.