gpt4 book ai didi

python - 如何为未捕获的异常处理程序编写单元测试

转载 作者:行者123 更新时间:2023-12-01 08:43:03 25 4
gpt4 key购买 nike

我有一个函数来捕获未捕获异常,如下。有没有办法编写一个单元测试来执行 uncaught_exception_handler() 函数,但正常退出测试?

import logging

def config_logger():
# logger setup here

def init_uncaught_exception_logger(logger):
'''Setup an exception handler to log uncaught exceptions.

This is typically called once per main executable.
This function only exists to provide a logger context to the nested function.

Args:
logger (Logger): The logger object to log uncaught exceptions with.
'''
def uncaught_exception_handler(*exc_args):
'''Log uncaught exceptions with logger.

Args:
exc_args: exception type, value, and traceback
'''
print("Triggered uncaught_exception_handler")
logger.error("uncaught: {}: {}\n{}".format(*exc_args))

sys.excepthook = uncaught_exception_handler

if __name__ == '__main__':
LOGGER = config_logger()
init_uncaught_exception_logger(LOGGER)
raise Exception("This is an intentional uncaught exception")

最佳答案

与其测试您的函数是否因未捕获的异常而被调用,不如测试是否已安装 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 module这是实现这一目标的方法。

关于python - 如何为未捕获的异常处理程序编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53433164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com