如果在 运行 unittest 时出现某个异常,通知用户

inform the user if a certain exception is raised while running unittest

我一直在写单元测试。虽然必须有办法,但我发现在 unittest class 方法中获取任何打印语句来打印任何东西都非常困难,但是当 unittest 向我显示差异时可以看到发生了什么。

之前已按照 here 所述使用 assertRaises 测试异常,但这是关于检测而不是断言。

测试假设某个硬件设备在 运行 时已插入 USB 端口。如果有人在没有连接设备的情况下尝试 运行 被测试的程序会引发以下问题:

RuntimeError('Device not reachable. Please connect it to USB')

我刚刚在 unittest 方法中测试了 sys.exit(0),但它也没有退出。尽管如此,退出并不是那么重要,如果所有测试都失败可能会更好,但如果第一个测试检测到异常然后向用户打印一条消息,如 "The device needs to be connected before running unittests."[= ,那将是礼貌的30=]。有谁知道如何做到这一点?

它是标准 class,如 docs 中所述,继承自 unittest.TestCase,具有 setUptearDown 方法以及两者之间的测试。

您可以尝试一些解决方案:

拦截每个引发的异常:

SYS_EXCEPT_HOOK = sys.excepthook
def _excepthook(typ, value, trace):
    if typ is RuntimeError:
        print("{}\n{}\n{}".format(typ.__name__, value, ''.join(traceback.format_tb(trace))))
    SYS_EXCEPT_HOOK(typ, value, trace)
sys.excepthook = _excepthook