Fix issue #3372
This commit is contained in:
parent
5d4fe87b72
commit
ec2d8223cf
1
AUTHORS
1
AUTHORS
|
@ -188,6 +188,7 @@ Tareq Alayan
|
||||||
Ted Xiao
|
Ted Xiao
|
||||||
Thomas Grainger
|
Thomas Grainger
|
||||||
Thomas Hisch
|
Thomas Hisch
|
||||||
|
Tim Strazny
|
||||||
Tom Dalton
|
Tom Dalton
|
||||||
Tom Viner
|
Tom Viner
|
||||||
Trevor Bekolay
|
Trevor Bekolay
|
||||||
|
|
|
@ -584,10 +584,11 @@ def raises(expected_exception, *args, **kwargs):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
__tracebackhide__ = True
|
__tracebackhide__ = True
|
||||||
for exc in filterfalse(isclass, always_iterable(expected_exception)):
|
if not issubclass(expected_exception, BaseException):
|
||||||
msg = ("exceptions must be old-style classes or"
|
for exc in filterfalse(isclass, always_iterable(expected_exception)):
|
||||||
" derived from BaseException, not %s")
|
msg = ("exceptions must be old-style classes or"
|
||||||
raise TypeError(msg % type(exc))
|
" derived from BaseException, not %s")
|
||||||
|
raise TypeError(msg % type(exc))
|
||||||
|
|
||||||
message = "DID NOT RAISE {0}".format(expected_exception)
|
message = "DID NOT RAISE {0}".format(expected_exception)
|
||||||
match_expr = None
|
match_expr = None
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
``pytest.raises`` now works with exception classes that look like iterables.
|
|
@ -1,3 +1,4 @@
|
||||||
|
from _pytest.outcomes import Failed
|
||||||
import pytest
|
import pytest
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -147,3 +148,20 @@ class TestRaises(object):
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
with pytest.raises(IndexError, match='nomatch'):
|
with pytest.raises(IndexError, match='nomatch'):
|
||||||
int('asdf')
|
int('asdf')
|
||||||
|
|
||||||
|
def test_raises_exception_looks_iterable(self):
|
||||||
|
from six import add_metaclass
|
||||||
|
|
||||||
|
class Meta(type(object)):
|
||||||
|
def __getitem__(self, item):
|
||||||
|
return 1/0
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@add_metaclass(Meta)
|
||||||
|
class ClassLooksIterableException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
with pytest.raises(Failed, match="DID NOT RAISE <class 'raises.ClassLooksIterableException'>"):
|
||||||
|
pytest.raises(ClassLooksIterableException, lambda: None)
|
||||||
|
|
Loading…
Reference in New Issue