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



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


Глава 11 • Тестирование
Сбой теста
Как выглядит сбойный тест? Попробуем изменить функцию 
get_formatted_name()

чтобы она работала со вторыми именами, но сделаем это так, чтобы она перестала 
работать с полными именами из двух компонентов.
Новая версия 
get_formatted_name()
с дополнительным аргументом второго имени 
выглядит так:
name_function.py
def get_formatted_name(first, middle, last):
"""Строит отформатированное полное имя."""
full_name = f"{first} {middle} {last}"
return full_name.title()
Эта версия должна работать для полных имен из трех компонентов, но тестирова-
ние показывает, что она перестала работать для полных имен из двух компонентов. 
На этот раз файл 
test_name_function .py
выдает следующий результат:


====================================================================== 

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')
перестал работать из-за необходимого 
позиционного аргумента.
Также из вывода следует, что был выполнен один модульный тест 

. Наконец, 
дополнительное сообщение информирует, что тестовый сценарий в целом не 
прошел и в ходе выполнения произошла одна ошибка при выполнении тестового 
сценария 

. Эта информация размещается в конце вывода, чтобы она была видна 
сразу; разработчику не придется прокручивать длинный протокол, чтобы узнать 
количество сбойных тестов.


Тестирование функции
227
Реакция на сбойный тест
Что делать, если тест не проходит? Если предположить, что проверяются пра-
вильные условия, прохождение теста означает, что функция работает правильно, 
а сбой — что в новом коде добавилась ошибка. Итак, если тест не прошел, изменять 
нужно не тест, а код, который привел к сбою теста. Проанализируйте изменения, 
внесенные в функцию, и разберитесь, как они привели к нарушению ожидаемого 
поведения.
В данном случае у функции 
get_formatted_name()
было всего два обязательных 
параметра: имя и фамилия. Теперь она требует три обязательных параметра: имя, 
второе имя и фамилию. Добавление обязательного параметра для второго имени 
нарушило ожидаемое поведение 
get_formatted_name()
. В таком случае лучше все-
го сделать параметр второго имени необязательным. После этого тесты для имен 
с двумя компонентами снова будут проходить, и программа сможет получать также 
вторые имена. Изменим функцию 
get_formatted_name()
, чтобы параметр второго 
имени перестал быть обязательным, и снова выполним тестовый сценарий. Если 
он пройдет, можно переходить к проверке правильности обработки вторых имен.
Чтобы сделать второе имя необязательным, нужно переместить параметр 
middle
в конец списка параметров в определении функции и задать ему пустое значение по 
умолчанию. Также будет добавлена проверка 
if
, которая правильно строит полное 
имя в зависимости от того, передается второе имя или нет:


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




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

    Басты бет