Improve error message when pytest.warns fail
The error message contains the expected type of warnings and the warnings that were captured. Add tests.
This commit is contained in:
parent
da40bcf97f
commit
c5f0b751f4
|
@ -223,4 +223,7 @@ class WarningsChecker(WarningsRecorder):
|
||||||
if self.expected_warning is not None:
|
if self.expected_warning is not None:
|
||||||
if not any(r.category in self.expected_warning for r in self):
|
if not any(r.category in self.expected_warning for r in self):
|
||||||
__tracebackhide__ = True
|
__tracebackhide__ = True
|
||||||
pytest.fail("DID NOT WARN")
|
pytest.fail("DID NOT WARN. No warnings of type {0} was emitted. "
|
||||||
|
"The list of emitted warnings is: {1}.".format(
|
||||||
|
self.expected_warning,
|
||||||
|
[each.message for each in self]))
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import warnings
|
import warnings
|
||||||
|
import re
|
||||||
import py
|
import py
|
||||||
import pytest
|
import pytest
|
||||||
from _pytest.recwarn import WarningsRecorder
|
from _pytest.recwarn import WarningsRecorder
|
||||||
|
@ -114,7 +115,7 @@ class TestDeprecatedCall(object):
|
||||||
with pytest.raises(pytest.fail.Exception) as ex:
|
with pytest.raises(pytest.fail.Exception) as ex:
|
||||||
with pytest.deprecated_call():
|
with pytest.deprecated_call():
|
||||||
self.dep(1)
|
self.dep(1)
|
||||||
assert str(ex.value) == "DID NOT WARN"
|
assert str(ex.value).startswith("DID NOT WARN")
|
||||||
|
|
||||||
def test_deprecated_call_as_context_manager(self):
|
def test_deprecated_call_as_context_manager(self):
|
||||||
with pytest.deprecated_call():
|
with pytest.deprecated_call():
|
||||||
|
@ -185,16 +186,38 @@ class TestWarns(object):
|
||||||
with pytest.warns(RuntimeWarning):
|
with pytest.warns(RuntimeWarning):
|
||||||
warnings.warn("runtime", RuntimeWarning)
|
warnings.warn("runtime", RuntimeWarning)
|
||||||
|
|
||||||
with pytest.raises(pytest.fail.Exception):
|
with pytest.warns(UserWarning):
|
||||||
|
warnings.warn("user", UserWarning)
|
||||||
|
|
||||||
|
with pytest.raises(pytest.fail.Exception) as excinfo:
|
||||||
with pytest.warns(RuntimeWarning):
|
with pytest.warns(RuntimeWarning):
|
||||||
warnings.warn("user", UserWarning)
|
warnings.warn("user", UserWarning)
|
||||||
|
excinfo.match(r"DID NOT WARN. No warnings of type \(.+RuntimeWarning.+,\) was emitted. "
|
||||||
|
r"The list of emitted warnings is: \[UserWarning\('user',\)\].")
|
||||||
|
|
||||||
with pytest.raises(pytest.fail.Exception):
|
with pytest.raises(pytest.fail.Exception) as excinfo:
|
||||||
with pytest.warns(UserWarning):
|
with pytest.warns(UserWarning):
|
||||||
warnings.warn("runtime", RuntimeWarning)
|
warnings.warn("runtime", RuntimeWarning)
|
||||||
|
excinfo.match(r"DID NOT WARN. No warnings of type \(.+UserWarning.+,\) was emitted. "
|
||||||
|
r"The list of emitted warnings is: \[RuntimeWarning\('runtime',\)\].")
|
||||||
|
|
||||||
|
with pytest.raises(pytest.fail.Exception) as excinfo:
|
||||||
with pytest.warns(UserWarning):
|
with pytest.warns(UserWarning):
|
||||||
warnings.warn("user", UserWarning)
|
pass
|
||||||
|
excinfo.match(r"DID NOT WARN. No warnings of type \(.+UserWarning.+,\) was emitted. "
|
||||||
|
r"The list of emitted warnings is: \[\].")
|
||||||
|
|
||||||
|
warning_classes = (UserWarning, FutureWarning)
|
||||||
|
with pytest.raises(pytest.fail.Exception) as excinfo:
|
||||||
|
with pytest.warns(warning_classes) as warninfo:
|
||||||
|
warnings.warn("runtime", RuntimeWarning)
|
||||||
|
warnings.warn("import", ImportWarning)
|
||||||
|
|
||||||
|
message_template = ("DID NOT WARN. No warnings of type {0} was emitted. "
|
||||||
|
"The list of emitted warnings is: {1}.")
|
||||||
|
excinfo.match(re.escape(message_template.format(warning_classes,
|
||||||
|
[each.message for each in warninfo])))
|
||||||
|
|
||||||
|
|
||||||
def test_record(self):
|
def test_record(self):
|
||||||
with pytest.warns(UserWarning) as record:
|
with pytest.warns(UserWarning) as record:
|
||||||
|
|
Loading…
Reference in New Issue