假定此示例代码:
def test_foo():
dict = load_dict()
try:
value = dict[foo][bar]
except KeyError:
print('missing foo or bar')
如果由于foo或bar不存在而引发KeyError,则测试不会失败,因为捕获了异常.如果我添加了一个SystemExit(1),它将失败,打印消息并显示所有回溯.
我的问题是,我如何告诉pytest如果发生KeyError,则意味着测试失败,因此我不需要引发SystemExit?
解决方法:
有一个功能pytest.fail
明确使测试失败:
import pytest
def test_foo():
d1 = {'foo': 'bar'}
try:
value = d1['baz']
except KeyError as err:
pytest.fail('this was unexpected: {}'.format(err))
但是,惯用的方式是使用pytest.raises
上下文管理器来验证是否引发了异常,并使用一些方便的实用程序将其捕获以进行分析:
import pytest
def test_foo():
d1 = {'foo': 'bar'}
with pytest.raises(KeyError) as excinfo:
value = d1['baz']
assert excinfo.type == KeyError
assert excinfo.match('baz')
查看文档以获取更多示例.如果您熟悉unittest,则pytest.raises是unittest.TestCase.assertRaises的项,而pytest.fail是unittest.TestCase.fail的项.
原文地址:https://codeday.me/bug/20191109/2010658.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。