Тестирование
функции
225
имени и фамилии. Мы назвали этот метод
test_first_last_name()
. Любой метод,
имя которого начинается с
test_
, будет выполняться автоматически при
запуске
test_name_function .py
. В тестовом методе вызывается тестируемая функция и сохра-
няется возвращаемое значение, которое необходимо проверить. В данном примере
вызывается функция
get_formatted_name()
с аргументами
'janis'
и
'joplin'
,
а результат
сохраняется в переменной
formatted_name
.
В точке
используется одна из самых полезных особенностей
unittest
: метод
assert
. Методы
assert
проверяют, что полученный результат соответствует тому
результату, который вы рассчитывали получить. В данном случае известно, что
функция
get_formatted_name()
должна вернуть полное имя с пробелами и капита-
лизацией слов, поэтому переменная
formatted_name
должна содержать текст «Janis
Joplin». Чтобы убедиться в этом, мы используем метод
assertEqual()
из модуля
unittest
и передаем ему переменную
formatted_name
и строку
'Janis
Joplin'
. Вызов
self.assertEqual(formatted_name, 'Janis Joplin')
означает: «Сравни значение
formatted_name
со строкой
'Janis
Joplin'
. Если они
равны, как и ожидалось, — хорошо. Но если они не равны, обязательно сообщи
мне!»
Мы запустим этот файл напрямую, но важно заметить, что многие тестовые фрейм-
ворки импортируют ваши тестовые файлы перед их выполнением. При импортиро-
вании файла интерпретатор выполняет файл в процессе импортирования. Блок
if
в точке
проверяет специальную переменную
__name__
, значение которой задается
при выполнении программы. Если файл выполняется как главная программа, то
переменной
__name__
будет присвоено значение
'__main__'
. В этом случае вызы-
вается метод
unittest.main()
, который выполняет тестовый сценарий. Если файл
импортируется тестовым сценарием, то переменная
__name__
будет содержать
значение
'__main__'
, и этот блок выполняться не будет.
При запуске
test_name_function .py
будет получен следующий результат:
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Точка в первой строке вывода сообщает, что один тест прошел успешно. Следую-
щая строка говорит, что для выполнения одного теста Python потребовалось менее
0,001 секунды. Наконец, завершающее сообщение
OK
говорит о том, что прошли все
модульные тесты в тестовом сценарии.
Этот результат показывает, что функция
get_formatted_name()
успешно работает
для полных имен, состоящих из имени и фамилии, если только функция не была
изменена. В случае внесения изменений в
get_formatted_name()
тест можно запу-
стить снова. И если тестовый сценарий снова пройдет, мы будем знать, что функция
продолжает успешно работать с полными именами из двух компонентов.