Вместо того, чтобы проверять, что ваша функция вызывается для неперехваченных исключений, вероятно, лучше вместо этого проверить, что установлен excepthook
и что функция работает правильно, когда вы вызываете ее вручную.Это дает вам довольно убедительные доказательства того, что excepthook
будет вести себя правильно при реальном использовании.Вы захотите переместить свой uncaught_exception_handler
за пределы init_uncaught_exception_logger
, чтобы ваши тесты могли получить к нему более легкий доступ.
assert sys.excepthook is uncaught_exception_handler
with your_preferred_output_capture_mechanism:
try:
1/0
except ZeroDivisionError:
uncaught_exception_handler(*sys.exc_info())
assert_something_about_captured_output()
Если вы действительно хотите вызвать excepthook
через необработанное исключение, тогда вы 'Вам нужно будет запустить подпроцесс и проверить его вывод.Модуль subprocess
- путь для этого.