From 3cbf0c8ec028e4fdba2e66327a2d4f01025804c4 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 15 Feb 2018 12:11:56 +0100 Subject: [PATCH] Raise unexpected exceptions with pytest.raises() using match= --- _pytest/python_api.py | 2 +- changelog/3222.bugfix | 1 + changelog/3222.trivial | 1 - testing/python/raises.py | 10 ++++++++++ 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 changelog/3222.bugfix delete mode 100644 changelog/3222.trivial diff --git a/_pytest/python_api.py b/_pytest/python_api.py index 5bbf3ac7a..89ef9e0a9 100644 --- a/_pytest/python_api.py +++ b/_pytest/python_api.py @@ -617,6 +617,6 @@ class RaisesContext(object): suppress_exception = issubclass(self.excinfo.type, self.expected_exception) if sys.version_info[0] == 2 and suppress_exception: sys.exc_clear() - if self.match_expr: + if self.match_expr and suppress_exception: self.excinfo.match(self.match_expr) return suppress_exception diff --git a/changelog/3222.bugfix b/changelog/3222.bugfix new file mode 100644 index 000000000..40a8e99e9 --- /dev/null +++ b/changelog/3222.bugfix @@ -0,0 +1 @@ +Errors shown when a ``pytest.raises()`` with ``match=`` fails are now cleaner on what happened: When no exception was raised, the "matching '...'" part got removed as it falsely implies that an exception was raised but it didn't match. When a wrong exception was raised, it's now thrown (like ``pytest.raised()`` without ``match=`` would) instead of complaining about the unmatched text. \ No newline at end of file diff --git a/changelog/3222.trivial b/changelog/3222.trivial deleted file mode 100644 index fbbbd5510..000000000 --- a/changelog/3222.trivial +++ /dev/null @@ -1 +0,0 @@ -The "matching '...'" part got removed from ``pytest.raises()`` error messages as it falsely implies that an exception was raised but it didn't match. \ No newline at end of file diff --git a/testing/python/raises.py b/testing/python/raises.py index 321ee349e..183259f6b 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -132,3 +132,13 @@ class TestRaises(object): with pytest.raises(AssertionError, match=expr): with pytest.raises(ValueError, match=msg): int('asdf', base=10) + + def test_raises_match_wrong_type(self): + """Raising an exception with the wrong type and match= given. + + pytest should throw the unexpected exception - the pattern match is not + really relevant if we got a different exception. + """ + with pytest.raises(ValueError): + with pytest.raises(IndexError, match='nomatch'): + int('asdf')