Adding `does_not_raise` to documentation only
This commit is contained in:
		
							parent
							
								
									977adf1354
								
							
						
					
					
						commit
						fd4289dae0
					
				| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
A context manager ``does_not_raise`` is added to complement ``raises`` in parametrized tests with conditional raises.
 | 
			
		||||
| 
						 | 
				
			
			@ -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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue