Hypothesis
==========
`Hypothesis `_ ist eine Bibliothek, mit der
ihr Tests schreiben könnt, die aus einer Quelle von Beispielen :term:`
`parametrisiert ` werden. Anschließend werden einfache und
verständliche Beispiele generiert, die dazu verwendet werden können, eure Tests
fehlschlagen zu lassen und Fehler mit wenig Aufwand zu finden.
#. Installiert Hypothesis:
.. tab:: Linux/macOS
.. code-block:: console
$ python -m pip install hypothesis
.. tab:: Windows
.. code-block:: ps1con
C:> python -m pip install hypothesis
Alternativ kann Hypothesis auch mit Erweiterungen installiert werden, z.B.:
.. tab:: Linux/macOS
.. code-block:: console
$ python -m pip install hypothesis[numpy,pandas]
.. tab:: Windows
.. code-block:: ps1con
C:> python -m pip install hypothesis[numpy,pandas]
#. Schreibt einen Test:
#. Importe:
.. literalinclude:: test_hypothesis.py
:language: python
:lines: 1-3
:lineno-start: 1
#. Testen:
.. literalinclude:: test_hypothesis.py
:language: python
:lines: 6-
:lineno-start: 6
#. Test durchführen:
.. tab:: Linux/macOS
.. code-block:: pytest
$ python -m pytest test_hypothesis.py
============================= test session starts ==============================
platform darwin -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
rootdir: /Users/veit/cusy/trn/python-basics/docs/test
plugins: hypothesis-6.114.1
collected 1 item
test_hypothesis.py F [100%]
=================================== FAILURES ===================================
__________________________________ test_mean ___________________________________
@given(lists(floats(allow_nan=False, allow_infinity=False), min_size=1))
> def test_mean(ls):
test_hypothesis.py:6:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ls = [9.9792015476736e+291, 1.7976931348623157e+308]
@given(lists(floats(allow_nan=False, allow_infinity=False), min_size=1))
def test_mean(ls):
mean = sum(ls) / len(ls)
> assert min(ls) <= mean <= max(ls)
E assert inf <= 1.7976931348623157e+308
E + where 1.7976931348623157e+308 = max([9.9792015476736e+291, 1.7976931348623157e+308])
test_hypothesis.py:8: AssertionError
---------------------------------- Hypothesis ----------------------------------
Falsifying example: test_mean(
ls=[9.9792015476736e+291, 1.7976931348623157e+308],
)
=========================== short test summary info ============================
FAILED test_hypothesis.py::test_mean - assert inf <= 1.7976931348623157e+308
============================== 1 failed in 0.44s ===============================
.. tab:: Windows
.. code-block:: pytest
C:> python -m pytest test_hypothesis.py
============================= test session starts ==============================
platform win32 -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
rootdir: C:\Users\veit\python-basics\docs\test
plugins: plugins: hypothesis-6.114.1
collected 1 item
test_hypothesis.py F [100%]
=================================== FAILURES ===================================
__________________________________ test_mean ___________________________________
@given(lists(floats(allow_nan=False, allow_infinity=False), min_size=1))
> def test_mean(ls):
test_hypothesis.py:6:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ls = [9.9792015476736e+291, 1.7976931348623157e+308]
@given(lists(floats(allow_nan=False, allow_infinity=False), min_size=1))
def test_mean(ls):
mean = sum(ls) / len(ls)
> assert min(ls) <= mean <= max(ls)
E assert inf <= 1.7976931348623157e+308
E + where 1.7976931348623157e+308 = max([9.9792015476736e+291, 1.7976931348623157e+308])
test_hypothesis.py:8: AssertionError
---------------------------------- Hypothesis ----------------------------------
Falsifying example: test_mean(
ls=[9.9792015476736e+291, 1.7976931348623157e+308],
)
=========================== short test summary info ============================
FAILED test_hypothesis.py::test_mean - assert inf <= 1.7976931348623157e+308
============================== 1 failed in 0.44s ===============================
.. seealso::
`Hypothesis for the Scientific Stack
`_