テストに仮説を使用しており、テストの 2 つの引数間の関係を確立したいと考えていました。は承知してassume
いますが、事前に制約を知っているとかなりもったいないと思います。
最小限の例を次に示します。
from datetime import date
import pytest
from hypothesis import given, assume, strategies as st
def get_daterange_filter(start, end):
"""`start` and `end` are dates of the format: YYYYMMDD"""
if int(start) > int(end):
raise ValueError(f"{start} comes after {end}")
else:
pass
dt_strategy = st.dates(min_value=date(2019, 4, 1),
max_value=date(2019, 7, 31))
@given(dt_strategy, dt_strategy)
def test_daterange_filter(dt1, dt2):
assume(dt1 > dt2)
start, end = dt1.strftime("%Y%m%d"), dt2.strftime("%Y%m%d")
with pytest.raises(ValueError):
get_daterange_filter(start, end)
上記の統計の要約では、次のように報告されます。
hypo.py::test_daterange_filter:
- 100 passing examples, 0 failing examples, 68 invalid examples
- Typical runtimes: 0-1 ms
- Fraction of time spent in data generation: ~ 47%
- Stopped because settings.max_examples=100
それはかなりの数の無駄な試みです。これは非常に単純なケースですが、典型的なデータ量の多いプロジェクトでは、そのようなシナリオが数多く予測できます。そこで、2 つの引数が特定の関係 (この場合、一方が他方よりも大きい) を満たすという仮説を簡単に伝える方法があるかどうか疑問に思っていました。ドキュメントで何も見つかりませんでした。