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,17 +186,39 @@ 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(RuntimeWarning): |  | ||||||
|                 warnings.warn("user", UserWarning) |  | ||||||
| 
 |  | ||||||
|         with pytest.raises(pytest.fail.Exception): |  | ||||||
|             with pytest.warns(UserWarning): |  | ||||||
|                 warnings.warn("runtime", RuntimeWarning) |  | ||||||
| 
 |  | ||||||
|         with pytest.warns(UserWarning): |         with pytest.warns(UserWarning): | ||||||
|             warnings.warn("user", 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): |     def test_record(self): | ||||||
|         with pytest.warns(UserWarning) as record: |         with pytest.warns(UserWarning) as record: | ||||||
|             warnings.warn("user", UserWarning) |             warnings.warn("user", UserWarning) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue