diff --git a/changelog/1830.feature.rst b/changelog/1830.feature.rst deleted file mode 100644 index 7a157abc3..000000000 --- a/changelog/1830.feature.rst +++ /dev/null @@ -1 +0,0 @@ -A context manager ``does_not_raise`` is added to complement ``raises`` in parametrized tests with conditional raises. diff --git a/doc/en/example/parametrize.rst b/doc/en/example/parametrize.rst index 50d615891..b7be543ea 100644 --- a/doc/en/example/parametrize.rst +++ b/doc/en/example/parametrize.rst @@ -565,16 +565,25 @@ As the result: Parametrizing conditional raising -------------------------------------------------------------------- -Use :func:`pytest.raises` and :func:`pytest.does_not_raise` together with the -:ref:`pytest.mark.parametrize ref` decorator to write parametrized tests in which some -tests raise exceptions and others do not. For example:: +Use :func:`pytest.raises` with the +:ref:`pytest.mark.parametrize ref` decorator to write parametrized tests +in which some tests raise exceptions and others do not. +It is helpful to define a function such as ``does_not_raise`` to serve +as a complement to ``raises``. For example:: + + from contextlib import contextmanager import pytest + @contextmanager + def does_not_raise(): + yield + + @pytest.mark.parametrize('example_input,expectation', [ - (3, pytest.does_not_raise()), - (2, pytest.does_not_raise()), - (1, pytest.does_not_raise()), + (3, does_not_raise()), + (2, does_not_raise()), + (1, does_not_raise()), (0, pytest.raises(ZeroDivisionError)), ]) def test_division(example_input, expectation): diff --git a/doc/en/reference.rst b/doc/en/reference.rst index f2dedbd97..92e298a88 100644 --- a/doc/en/reference.rst +++ b/doc/en/reference.rst @@ -61,12 +61,6 @@ pytest.raises .. autofunction:: pytest.raises(expected_exception: Exception, [match], [message]) :with: excinfo -pytest.does_not_raise -~~~~~~~~~~~~~~~~~~~~~ - -.. autofunction:: pytest.does_not_raise() - :with: excinfo - pytest.deprecated_call ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index a3532a541..1b643d430 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -4,7 +4,6 @@ import math import pprint import sys import warnings -from contextlib import contextmanager from decimal import Decimal from numbers import Number @@ -735,37 +734,3 @@ class RaisesContext(object): if self.match_expr is not None and suppress_exception: self.excinfo.match(self.match_expr) return suppress_exception - - -# builtin pytest.does_not_raise helper - - -@contextmanager -def does_not_raise(): - r''' - This context manager is a complement to ``pytest.raises()`` that does - *not* catch any exceptions raised by the code block. - - - This is essentially a *no-op* but is useful when - conditionally parametrizing tests that may or may not - raise an error. For example:: - - @pytest.mark.parametrize('example_input,expectation', [ - (3, does_not_raise()), - (2, does_not_raise()), - (1, does_not_raise()), - (0, raises(ZeroDivisionError)), - ]) - def test_division(example_input, expectation): - """Test how much I know division.""" - with expectation as excinfo: - assert (6 / example_input) is not None - - Note that `excinfo` will be *None* when using - ``does_not_raise``. In the example above, `execinfo` - will be `None` for the first three runs and - an :class:`ExceptionInfo` instance on last run. - ''' - - yield diff --git a/src/pytest.py b/src/pytest.py index 16ce2ad70..c0010f166 100644 --- a/src/pytest.py +++ b/src/pytest.py @@ -32,7 +32,6 @@ from _pytest.python import Instance from _pytest.python import Module from _pytest.python import Package from _pytest.python_api import approx -from _pytest.python_api import does_not_raise from _pytest.python_api import raises from _pytest.recwarn import deprecated_call from _pytest.recwarn import warns @@ -51,7 +50,6 @@ __all__ = [ "cmdline", "Collector", "deprecated_call", - "does_not_raise", "exit", "fail", "File", diff --git a/testing/python/raises.py b/testing/python/raises.py index 8135c2c34..f5827e9b0 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -97,12 +97,17 @@ class TestRaises(object): def test_does_not_raise(self, testdir): testdir.makepyfile( """ + from contextlib import contextmanager import pytest + @contextmanager + def does_not_raise(): + yield + @pytest.mark.parametrize('example_input,expectation', [ - (3, pytest.does_not_raise()), - (2, pytest.does_not_raise()), - (1, pytest.does_not_raise()), + (3, does_not_raise()), + (2, does_not_raise()), + (1, does_not_raise()), (0, pytest.raises(ZeroDivisionError)), ]) def test_division(example_input, expectation): @@ -117,10 +122,15 @@ class TestRaises(object): def test_does_not_raise_does_raise(self, testdir): testdir.makepyfile( """ + from contextlib import contextmanager import pytest + @contextmanager + def does_not_raise(): + yield + @pytest.mark.parametrize('example_input,expectation', [ - (0, pytest.does_not_raise()), + (0, does_not_raise()), (1, pytest.raises(ZeroDivisionError)), ]) def test_division(example_input, expectation):