我一直在写单元测试。尽管必须有一种方法,但我发现在unittest类方法中获取任何print语句以打印任何内容非常困难,但是可以看到unittest向我显示差异时发生了什么。
先前已按照here中所述测试了assertRaises
的异常,但这是有关检测未断言的。
测试假设某些硬件设备在运行时已插入USB端口。如果有人尝试在未连接设备的情况下运行该程序,则会引发以下问题:
RuntimeError('Device not reachable. Please connect it to USB')
我刚刚在unittest方法中测试了sys.exit(0)
,但也没有退出。不过,退出并不是那么重要,如果所有测试都失败,则可能会更好,但是如果第一个测试检测到Exception然后向用户显示一条消息,例如,这是有礼貌的,那么“设备需要在运行前连接好”单元测试。” 。有人知道如何实现这一目标吗?
这是docs中描述的标准类,它是使用unittest.TestCase
和setUp
方法从tearDown
继承而来的,并在两者之间进行测试。
答案 0 :(得分:1)
您可以尝试以下几种解决方案:
RuntimeError
skipUnless
decorator 拦截所有引发的异常:
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