如何在总是调用sys.exit()的函数上使用pytest?

时间:2017-05-25 03:08:31

标签: python unit-testing exception exception-handling pytest

首先,我的Python代码:

def terminate(code, message):
    if code in exit_codes:
        if not isinstance(message, type(None)) and not message == '':
            sys.stderr.write(message)
        sys.exit(exit_codes[code])
    else:
        error = 'ERROR: a termination request was received with an invalid exit code.\n'
        error += 'This is mostly likely a developer/application problem.\n'
        terminate('BAD_CODE', error)

我有一个全局定义的退出代码字典字典,对应于赋予sys.exit()的数字。如果code参数是有效的退出代码,则使用该代码的整数值作为参数调用sys.exit()。否则,terminate()BAD_CODE字典条目递归调用,该条目保证存在,然后最终调用sys.exit()

无论哪种方式,sys.exit()最终都被调用,因此Exception类型是SystemExit。我如何编写pytest的单元测试,这样我不仅检查SystemExit实际上是否被引发,而且发送给sys.exit()的整数值是它应该是什么?

我已经达到了典型的with raises(SystemExit) as exc_info:上下文管理器行,但我仍然坚持使用整数值检查部分。

0 个答案:

没有答案