【发布时间】:2017-03-06 10:42:53
【问题描述】:
是否存在类似于 pytest.raises 的 pytest 功能,如果该块引发指定的异常, 或 根本不引发,则该功能通过?比如:
def test_encode_err(ulist):
with pytest.maybe_raises_but_only(UnicodeEncodeError): # <== ?
assert encode_list(ulist, 'ascii') == map(lambda x:x.encode('ascii'), ulist)
这个问题出现在以下情况..
要测试的功能:
def encode_list(lst, enc):
"Encode all unicode values in ``lst`` using ``enc``."
return [(x.encode(enc) if isinstance(x, unicode) else x) for x in lst]
几个简单的测试(下面的夹具):
def test_encode_err(ulist):
with pytest.raises(UnicodeEncodeError):
assert encode_list(ulist, 'ascii')
def test_encode_u8(ulist, u8list):
assert encode_list(ulist, 'u8') == u8list
赛程:
@pytest.fixture(
scope='module',
params=[
u'blåbærsyltetøy',
u'', # <==== problem
]
)
def ustr(request):
print 'testing with:', `request.param`
return request.param
@pytest.fixture
def u8str(ustr):
return ustr.encode('u8')
@pytest.fixture
def ulist(ustr):
return [ustr, ustr]
@pytest.fixture
def u8list(u8str):
return [u8str, u8str]
指示的<== problem 只是test_encode_err() 的问题(而不是test_encode_u8()),因为u''.encode('ascii') 不会引发UnicodeEncodeError (没有不包含代码以上字符的Unicode 字符串)第 127 点将提高)。
是否有涵盖此用例的 py.test 函数?
【问题讨论】: