М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет166/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   162   163   164   165   166   167   168   169   ...   334
Байланысты:
Изучаем Python

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
.


Тестирование класса


Достарыңызбен бөлісу:
1   ...   162   163   164   165   166   167   168   169   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет