С модулем unittest
, как я могу проверить FileNotFoundError
возникает при открытии файла следующим образом:
func(filename):
try:
file = open(filename)
except FileNotFoundError:
exit()
Модуль Unittest
class TestFunc(unittest.TestCase):
def test_func(self):
self.assertRaises(FileNotFoundError, func, "no_exist.txt")
Полученная ошибка
AssertionError: FileNotFoundError, не созданный func
Вы проглатываете исключение в своем обработчике исключений, поэтому ваш код вызова (unit тест) не знает, что ошибка была поднята, все, что он видит, это то, что ваш код запустился и вышел.
Рассмотрите возможность повторного поднятия, как в:
func(filename):
try:
file = open(filename)
except FileNotFoundError:
# Whatever else you want to do
raise
Еще лучше, ваш unit тест не должен зависеть от того, какой файл не существует - модульные тесты должны быть само собой разумеющимися по определению. Подумайте, насмехаясь над открытым методом, чтобы у вас было больше контроля.
Использовать контекстный менеджер для исключения
Изменено в версии 2.7: Добавлена возможность использования assertRaises() в качестве менеджера контекста.
Если задан только аргумент исключения, возвращается менеджер контекста, чтобы тестируемый код мог быть написан как встроенный, а не как функция:
with self.assertRaises(SomeException):
do_something()