Par*_*007 5 python systemexit pytest python-3.x
我正在使用 pytest 编写测试。我遇到的情况是,SystemExit如果输入错误,某些函数会在终端上抛出一些错误消息。
我想为抛出的情况编写测试SystemExit,并验证输出错误消息中是否有特定的字符串。
这是代码:
def test_validate_input():
...
with pytest.raises(SystemExit) as error:
_validate_function(test_wrong_input)
assert error.value.code == 1
Run Code Online (Sandbox Code Playgroud)
error如果我运行验证某些输入的实际函数,我无法获得输出错误消息,因为我在命令行上得到的消息。请让我知道我在这里缺少什么。
编辑:
我正在调用 asubprocess.call_output来运行引发错误的命令。我必须在调用stderr=subprocess.STDOUT中添加call_output作为参数才能获取错误消息。然后我在测试中使用了@p3j4p5的答案。
Pytestraises()需要一个match参数。文档告诉我们:
如果指定,则为包含正则表达式或正则表达式对象的字符串,将针对异常的字符串表示形式进行测试
和
仅当用作
pytest.raises上下文管理器时才使用
所以它应该适合你的情况:
def test_validate_input():
...
with pytest.raises(SystemExit, match='exception message content'):
_validate_function(test_wrong_input)
Run Code Online (Sandbox Code Playgroud)
如果引发的SystemExit异常是通过与所提供的正则表达式匹配的消息引发的,则此测试将通过,否则将失败。
或者,如果您想手动检查消息:
上下文管理器生成一个
ExceptionInfo对象,可用于检查捕获的异常的详细信息
在您的情况下,假设SystemExit使用整数(代码)和字符串(消息)调用,则为:
def test_validate_input():
...
with pytest.raises(SystemExit) as exc_info:
_validate_function(test_wrong_input)
assert exc_info.value.args[0] == 1
assert exc_info.value.args[1] == 'exception message content'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |