Почему я получаю AttributeError при выполнении модульного теста на ноутбуке Jupiter?

58
3

Чтобы выполнить упражнение на ноутбуке Юпитера, мне нужно выполнить unit тест для функции, которую я назвал city_function

def city_function(city, country):

output = city.title() + ', ' + country.title()

return output

Эта функция хранится в "city_functions.py". Код, выполняющий unit тест, хранится в "test_cities2.ipynb". И я попробовал следующий код для выполнения модульного теста:

import unittest 

from city_functions import city_function

class CityCountryTestCase(unittest.TestCase):

# Verify if city_function works

def test_city_country_function(self):

output = city_function('lisbon', 'portugal')

self.assertEqual(output, 'Lisbon, Portugal')

unittest.main()

И я получил AttributeError типа: AttributeError: модуль ' main ' не имеет атрибута. Что я могу сделать, чтобы решить эту проблему?

спросил(а) 2019-04-06T19:40:00+03:00 1 год, 7 месяцев назад
1
Решение
59

Есть хорошая статья, которая описывает вашу проблему:

Причина в том, что unittest.main смотрит на sys.argv а первый параметр - это то, что запускает IPython или Jupyter, поэтому ошибка о том, что файл подключения к ядру не является допустимым атрибутом. Передача явного списка в unittest.main даст IPython и Jupyter взглянуть на sys.argv. Передача exit=False помешает unittest.main завершить процесс Kernell

Ваша последняя строка должна быть такой:

unittest.main(argv=['first-arg-is-ignored'], exit=False)

ответил(а) 2019-04-08T21:09:00+03:00 1 год, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема