Прохождение теста

We use cookies. Read the Privacy and Cookie Policy

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

Ниже приведен тестовый сценарий с одним методом, который проверяет, что функция get_formatted_name() правильно работает при передаче имени и фамилии:

test_name_function.py

import unittest

from name_function import get_formatted_name

(1) class NamesTestCase(unittest.TestCase):

. ."""Тесты для 'name_function.py'."""

. .

. .def test_first_last_name(self):

. . . ."""Имена вида 'Janis Joplin' работают правильно?"""

(2) . . . .formatted_name = get_formatted_name('janis', 'joplin')

(3) . . . .self.assertEqual(formatted_name, 'Janis Joplin')

unittest.main()

Сначала мы импортируем unittest и тестируемую функцию get_formatted_name(). В точке (1) создается класс NamesTestCase, который содержит серию модульных тестов для get_formatted_name(). Имя класса выбирается произвольно, но лучше выбрать имя, связанное с функцией, которую вы собираетесь тестировать, и включить в имя класса слово Test. Этот класс должен наследовать от класса unittest.TestCase, чтобы Python знал, как запустить написанные вами тесты.

Класс NamesTestCase содержит один метод, который тестирует всего один аспект get_formatted_name() — правильность форматирования имен, состоящих только из имени и фамилии. Мы назвали этот метод test_first_last_name(). Любой метод, имя которого начинается с test_, будет выполняться автоматически при запуске test_name_function.py. В тестовом методе вызывается тестируемая функция и сохраняется возвращаемое значение, которое необходимо проверить. В данном примере вызывается функция get_formatted_name() с аргументами 'janis' и 'joplin', а результат сохраняется в переменной formatted_name (2).

В точке (3) используется одна из самых полезных особенностей 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'. Если они равны, как и ожидалось, — хорошо. Но если они не равны, обязательно сообщи мне!»

Строка unittest.main() приказывает Python выполнить тесты из этого файла. При запуске test_name_function.py будет получен следующий результат:

.

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

Ran 1 test in 0.000s

OK

Точка в первой строке вывода сообщает, что один тест прошел успешно. Следующая строка говорит, что для выполнения одного теста Python потребовалось менее 0,001 секунды. Наконец, завершающее сообщение OK говорит о том, что все модульные тесты в тестовом сценарии прошли.

Этот результат показывает, что функция get_formatted_name() успешно работает для полных имен, состоящих из имени и фамилии, если только функция не была изменена. В случае внесения изменений в get_formatted_name() тест можно запустить снова. И если тестовый сценарий снова пройдет, мы будем знать, что функция продолжает успешно работать с полными именами из двух компонентов.