Есть ли функциональность pytest, аналогичная pytest.raises
, которая проходит, если блок вызывает указанное исключение, или вообще не вызывает? Что-то типа:
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, которая охватывает этот вариант использования?