0

最近、仮説を見て、次のように使用しました。

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.

仮説がミドルネームのない人とミドルネームのある人を生成した場合、私は特に気に入っています.

4

1 に答える 1