Добавление новых тестов

We use cookies. Read the Privacy and Cookie Policy

Теперь мы знаем, что 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'?"""

(1) . . . .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 тремя компонентами (1) , после чего используем assertEqual() для проверки того, что возвращенное полное имя совпадает с ожидаемым. При повторном запуске test_name_function.py оба теста проходят успешно:

..

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

Ran 2 tests in 0.000s

OK

Отлично! Теперь мы знаем, что функция по-прежнему работает с именами из двух компонентов, как Janis Joplin, но можем быть уверены в том, что она сработает и для имен с тремя компонентам — такими, как Wolfgang Amadeus Mozart.

Упражнения

11-1. Город, страна: напишите функцию, которая получает два параметра: название страны и название города. Функция должна возвращать одну строку в формате «Город, Страна», например «Santiago, Chile». Сохраните функцию в модуле с именем city_functions.py.

Создайте файл test_cities.py для тестирования только что написанной функции (не забудьте импортировать unittest и тестируемую функцию). Напишите метод test_city_country() для проверки того, что вызов функции с такими значениями, как ‘santiago’ и ‘chile’, дает правильную строку. Запустите test_cities.py и убедитесь в том, что тест test_city_country() проходит успешно.

11-2. Население: измените свою функцию так, чтобы у нее был третий обязательный параметр — население. В новой версии функция должна возвращать одну строку вида «Santiago, Chile — population 5000000.» Снова запустите программу test_cities.py. Убедитесь в том, что тест test_city_country() на этот раз не проходит.

Измените функцию так, чтобы параметр населения стал необязательным. Снова запустите test_cities.py и убедитесь в том, что тест test_city_country() проходит успешно.

Напишите второй тест test_city_country_population(), который проверяет вызов функции со значениями ‘santiago’, ‘chile’ и ‘population=5000000’. Снова запустите test_cities.py и убедитесь в том, что новый тест проходит успешно.