假设此示例代码:
def test_foo():
dict = load_dict()
try:
value = dict[foo][bar]
except KeyError:
print('missing foo or bar')
如果由于KeyError
或foo
不存在而引发bar
,则测试不会因为捕获到异常而失败。如果我添加raise SystemExit(1)
,它将失败,打印消息并显示所有追溯。
我的问题是,如何告诉pytest如果发生KeyError
则表示测试失败,这样我就不需要提出SystemExit
?
答案 0 :(得分:2)
有一个功能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
的吊坠。
答案 1 :(得分:1)
您可以使用def test_connection_fails(self,):
with pytest.raises(KeyError) as excinfo:
buckets = list_all_buckets()
构造函数:
sys.exit
然后,您可以在不使用$photo = $data[$x]['gallery'][0]['big'];
if ($photo === null) {
$photo = 'img/noPhoto.png';
}