通知用户在运行单元测试时是否引发某些异常

时间:2019-06-05 10:40:49

标签: python python-3.x python-unittest

我一直在写单元测试。尽管必须有一种方法,但我发现在unittest类方法中获取任何print语句以打印任何内容非常困难,但是可以看到unittest向我显示差异时发生了什么。

先前已按照here中所述测试了assertRaises的异常,但这是有关检测未断言的。

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

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

我刚刚在unittest方法中测试了sys.exit(0),但也没有退出。不过,退出并不是那么重要,如果所有测试都失败,则可能会更好,但是如果第一个测试检测到Exception然后向用户显示一条消息,例如,这是有礼貌的,那么“设备需要在运行前连接好”单元测试。” 。有人知道如何实现这一目标吗?

这是docs中描述的标准类,它是使用unittest.TestCasesetUp方法从tearDown继承而来的,并在两者之间进行测试。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下几种解决方案:

拦截所有引发的异常:

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