Merge pull request #2150 from lesteve/add-caught-warnings-info-when-warns-fail
Improve error message when pytest.warns fail
This commit is contained in:
commit
316406291d
1
AUTHORS
1
AUTHORS
|
@ -82,6 +82,7 @@ Katarzyna Jachim
|
|||
Kevin Cox
|
||||
Lee Kamentsky
|
||||
Lev Maximov
|
||||
Loic Esteve
|
||||
Lukas Bednar
|
||||
Luke Murphy
|
||||
Maciek Fijalkowski
|
||||
|
|
|
@ -5,12 +5,17 @@
|
|||
|
||||
*
|
||||
|
||||
*
|
||||
* Improve error message when pytest.warns fails (`#2150`_). The type(s) of the
|
||||
expected warnings and the list of caught warnings is added to the
|
||||
error message. Thanks `@lesteve`_ for the PR.
|
||||
|
||||
*
|
||||
|
||||
*
|
||||
|
||||
.. _@lesteve: https://github.com/lesteve
|
||||
|
||||
.. _#2150: https://github.com/pytest-dev/pytest/issues/2150
|
||||
|
||||
|
||||
3.0.5 (2016-12-05)
|
||||
|
|
|
@ -223,4 +223,7 @@ class WarningsChecker(WarningsRecorder):
|
|||
if self.expected_warning is not None:
|
||||
if not any(r.category in self.expected_warning for r in self):
|
||||
__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 re
|
||||
import py
|
||||
import pytest
|
||||
from _pytest.recwarn import WarningsRecorder
|
||||
|
@ -114,7 +115,7 @@ class TestDeprecatedCall(object):
|
|||
with pytest.raises(pytest.fail.Exception) as ex:
|
||||
with pytest.deprecated_call():
|
||||
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):
|
||||
with pytest.deprecated_call():
|
||||
|
@ -185,17 +186,39 @@ class TestWarns(object):
|
|||
with pytest.warns(RuntimeWarning):
|
||||
warnings.warn("runtime", RuntimeWarning)
|
||||
|
||||
with pytest.raises(pytest.fail.Exception):
|
||||
with pytest.warns(RuntimeWarning):
|
||||
warnings.warn("user", UserWarning)
|
||||
|
||||
with pytest.raises(pytest.fail.Exception):
|
||||
with pytest.warns(UserWarning):
|
||||
warnings.warn("runtime", RuntimeWarning)
|
||||
|
||||
with pytest.warns(UserWarning):
|
||||
warnings.warn("user", UserWarning)
|
||||
|
||||
with pytest.raises(pytest.fail.Exception) as excinfo:
|
||||
with pytest.warns(RuntimeWarning):
|
||||
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) as excinfo:
|
||||
with pytest.warns(UserWarning):
|
||||
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):
|
||||
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):
|
||||
with pytest.warns(UserWarning) as record:
|
||||
warnings.warn("user", UserWarning)
|
||||
|
|
Loading…
Reference in New Issue