最近、仮説を見て、次のように使用しました。
import hypothesis.strategies as s
from hypothesis import given
@given(s.integers(min_value=-(10 ** 6), max_value=10 ** 6))
def test_factorize(an_integer):
if an_integer == 0:
# This is tested in `test_factorize_zero` and should throw an exception
return
factors = mpu.math.factorize(an_integer)
product = 1
for factor in factors:
product *= factor
assert product == an_integer
これはかなりクールです。私が目にする主な制限は戦略です (例: s.integers
)。多くの戦略があり、どの戦略があるか、またはそれらを適切に使用する方法をまだ学習中です。
pydantic を使用する型注釈付きクラスを指定して、オブジェクトを生成する戦略はありますか?
マイトライ
from typing import Optional
from hypothesis import given
from hypothesis.strategies import from_type
from pydantic import BaseModel
class Adress(BaseModel):
city: str
street: str
house_number: int
postal_code: int
class Person(BaseModel):
prename: str
middlename: Optional[str]
lastname: str
address: Adress
@given(from_type(Person))
def test_me(person: Person):
assert isinstance(person, Person)
これを as として保存してtest_foo.py
実行するpytest
と、次のようになります。
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― test_me ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
@given(from_type(Person))
> def test_me(person: Person):
test_foo.py:20:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E pydantic.error_wrappers.ValidationError: 3 validation errors for Person
E prename
E field required (type=value_error.missing)
E lastname
E field required (type=value_error.missing)
E address
E field required (type=value_error.missing)
pydantic/main.py:283: ValidationError
---------------------------------------------------------------- Hypothesis ----------------------------------------------------------------
You can add @seed(42732672939050403878146949573829059697) to this test or run pytest with --hypothesis-seed=42732672939050403878146949573829059697 to reproduce this failure.
仮説がミドルネームのない人とミドルネームのある人を生成した場合、私は特に気に入っています.