如果在 运行 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
,具有 setUp
和 tearDown
方法以及两者之间的测试。
您可以尝试一些解决方案:
- 在 setUpClass method
中记录并提高你的 RuntimeError
- 使用
skipUnless
decorator
- 拦截每个引发的错误以测试其类型并记录是否为 RuntimeError(见下文)
拦截每个引发的异常:
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
我一直在写单元测试。虽然必须有办法,但我发现在 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
,具有 setUp
和 tearDown
方法以及两者之间的测试。
您可以尝试一些解决方案:
- 在 setUpClass method 中记录并提高你的
- 使用
skipUnless
decorator - 拦截每个引发的错误以测试其类型并记录是否为 RuntimeError(见下文)
RuntimeError
拦截每个引发的异常:
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