Тестирование для KeyError

Я пытаюсь написать единичный тест, который проверяет, что KeyError создается, когда плохой ключ передается в словарь.

Код, вызывающий исключение:

 connections = SettingsManager().get_connections() try: connection = connections[self.conn_name] except Exception: self.log.error("Connection %s does not exist, exiting." % conn_name) self.log.error(sys.exc_info()[0]) raise 

Я посмотрел и нашел тесты KeyError с использованием лямбда, но мне не повезло. Вот тест, который у меня есть до сих пор, но это ошибки с фактическим KeyError .

 def test_bad_connection(self): #Testing to see if a non existant connection will fail gracefully. records = [1, 2] given_result = DataConnector("BadConnection").generate_data(self.table, records) expected_result = "BadConnection" self.assertRaises(KeyError, given_result[:1]) 

2 Solutions collect form web for “Тестирование для KeyError”

assertRaises() вызовет функцию для вас и утвердит, что этот вызов вызывает исключение:

 records = [1, 2] connector = DataConnector("BadConnection") self.assertRaises(KeyError, connector.generate_data, self.table, records) 

В качестве альтернативы, используйте assertRaises() в качестве менеджера контекста:

 with self.assertRaises(KeyError) as raises: DataConnector("BadConnection").generate_data(self.table, records) 

который имеет дополнительное преимущество, что контекстный менеджер затем позволяет вам получить доступ к поднятому исключению:

 self.assertEqual(raises.exception.message, "BadConnection") 

self.assertRaise() принимает только вызываемый, поэтому while

self.assertRaises(KeyError, given_result[:1])
даст вам фактический KeyError во время тестирования,

self.assertRaises(KeyError, lambda: given_result[:1])
должно сработать.

В целом:
Не работает: self.assertRaises(KeyError, mydict[mykey]) #KeyError в тестах
self.assertRaises(KeyError, lambda: mydict[mykey]) ли: self.assertRaises(KeyError, lambda: mydict[mykey])
self.assertRaises(KeyError, mydict.__getitem__, mykey) ли: self.assertRaises(KeyError, mydict.__getitem__, mykey) #, но для этого требуется фактический dict, а не функция

  • Методы без тестирования в тестовой среде Python
  • Доступ к атрибуту подтверждения для экземпляра mock
  • Внедрение ошибки ввода-вывода в Linux
  • Отсутствует таблица при запуске Django Unittest с Sqlite3
  • Mocking side_effect, в то время как autospeccing дает функцию дополнительного аргумента
  • assertRaises в модуле python не тестирует исключение
  • Как использовать класс TextTestRunner из модуля Unittest Python в режиме failfast?
  • Как убрать jinja2? движок Google, python
  •  
    Interesting Posts for Van-Lav

    Почему языки программирования ограничивают точность 22/7 одинаково?

    создать heatmap2d из txt-файла

    Обратный сортировать массив 2d numpy в python

    Чистый способ получить объект дескриптора

    Есть ли способ получить доступ к исходной функции в издеваемом методе / функции, чтобы я мог изменять аргументы и передавать их исходным функциям?

    Двойная итерация

    Python: ссылка на класс исключений, созданный с помощью PyErr_NewException в модуле расширения

    Все функции tkinter запускаются при запуске программы

    Дополнительная ценность тренировки Keras 'fit_generator

    Нарезка массива numpy вдоль динамически заданной оси

    OpenERP 7 Добавление поля в существующий модуль – ошибка проверки XML

    Оператор Python дает неожиданный ответ

    AttributeError: объект 'datetime.date' не имеет атрибута 'date'

    Реконструированное изображение после лапласианской пирамиды Не то же самое, что оригинальное изображение

    Импорт модуля в оболочку Idle

    Python - лучший язык программирования в мире.