Не запускается тест в питоне
import unittest
from number_writer import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis', 'Joplin')
unittest.main()
Почему вместо запуска теста, импортируется и запускается программа
Импортирую этот код:
def get_formatted_name(first, last):
full_name = first + ' ' + last
return full_name.title()
print("Enter 'q' at any time to quit")
while True:
first = input("\nplease give me a first name: ")
if first == 'q':
break
last = input("\nplease give me a last name: ")
if last == 'q':
break
formatted_name = get_formatted_name(first, last)
print("\nNeatly formatted name: " + formatted_name)
Ответы (1 шт):
При импорте модуля весь код, который находится не внутри функций или методов классов, запускается. Чтобы избежать запуска кода при импорте, его убирают в блок if __name__ == “__main__” (смысл проверки в том, что при импорте модуля глобальная переменная __name__ равна имени этого модуля, а при запуске модуля без импорта она равна "__main__").
Подробнее можно почитать в этом ответе: Что делает if __name__ == “__main__”?
У вас при импорте модуля сразу запускается бесконечный цикл запроса данных от пользователя, до выполнения теста код не доходит. Нужно спрятать этот цикл в блок if __name__ == “__main__”, пример:
def get_formatted_name(first, last):
full_name = first + ' ' + last
return full_name.title()
def main():
print("Enter 'q' at any time to quit")
while True:
first = input("\nplease give me a first name: ")
if first == 'q':
break
last = input("\nplease give me a last name: ")
if last == 'q':
break
formatted_name = get_formatted_name(first, last)
print("\nNeatly formatted name: " + formatted_name)
if __name__ == "__main__":
main()
Я обычно большие блоки (больше 1-2 строк) убираю в функцию с именем main, но это не обязательно, так тоже будет работать:
def get_formatted_name(first, last):
full_name = first + ' ' + last
return full_name.title()
if __name__ == "__main__":
print("Enter 'q' at any time to quit")
while True:
first = input("\nplease give me a first name: ")
if first == 'q':
break
last = input("\nplease give me a last name: ")
if last == 'q':
break
formatted_name = get_formatted_name(first, last)
print("\nNeatly formatted name: " + formatted_name)