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
|
Kevin Cox
|
||||||
Lee Kamentsky
|
Lee Kamentsky
|
||||||
Lev Maximov
|
Lev Maximov
|
||||||
|
Loic Esteve
|
||||||
Lukas Bednar
|
Lukas Bednar
|
||||||
Luke Murphy
|
Luke Murphy
|
||||||
Maciek Fijalkowski
|
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)
|
3.0.5 (2016-12-05)
|
||||||
|
|
|
@ -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