doc: improve parametrizing conditional raising example to also check for values

What one typically actually wants in such a case is both, checking for some
resulting values *and* checking for some expected exception.

Since this is easily possible with the `nullcontext` context manager, adapt the
example accordingly.

Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
This commit is contained in:
Christoph Anton Mitterer 2023-08-03 16:23:09 +02:00
parent 21f45ac5f3
commit 672e9a35bf
1 changed files with 9 additions and 6 deletions

View File

@ -657,7 +657,10 @@ Use :func:`pytest.raises` with the
:ref:`pytest.mark.parametrize ref` decorator to write parametrized tests :ref:`pytest.mark.parametrize ref` decorator to write parametrized tests
in which some tests raise exceptions and others do not. in which some tests raise exceptions and others do not.
It may be helpful to use ``nullcontext`` as a complement to ``raises``. ``contextlib.nullcontext`` can be used to test cases that are not expected to
raise exceptions but that should result in some value. The value is given as the
``enter_result`` parameter, which will be available as the ``with`` statements
target (``e`` in the example below).
For example: For example:
@ -671,16 +674,16 @@ For example:
@pytest.mark.parametrize( @pytest.mark.parametrize(
"example_input,expectation", "example_input,expectation",
[ [
(3, nullcontext()), (3, nullcontext(2)),
(2, nullcontext()), (2, nullcontext(3)),
(1, nullcontext()), (1, nullcontext(6)),
(0, pytest.raises(ZeroDivisionError)), (0, pytest.raises(ZeroDivisionError)),
], ],
) )
def test_division(example_input, expectation): def test_division(example_input, expectation):
"""Test how much I know division.""" """Test how much I know division."""
with expectation: with expectation as e:
assert (6 / example_input) is not None assert (6 / example_input) == e
In the example above, the first three test cases should run unexceptionally, In the example above, the first three test cases should run unexceptionally,
while the fourth should raise ``ZeroDivisionError``. while the fourth should raise ``ZeroDivisionError``.