0

私はDjangoモデルを持っています。とりわけ、ForeignKeyto がありUserます:

class MyModel(models.Model):
    foo = models.BooleanField()
    bar = models.ForeignKey(User)

テストには、適切な形状を生成するメソッドがありますUser-generate_test_user()

モデルのインスタンスに関するさまざまなプロパティをアサートするために、仮説を使用していくつかのテストを作成したいと考えています。

私の最初の実装は次のようになりました。

class MyTestCase(TestCase):

    @hypothesis.given(models(MyModel, bar=just(generate_test_user())))
    def test_my_model(self, mymodel):
        pass

generate_test_userただし、インポート時に呼び出され、Django の移行などが実行される前にモデルを作成しようとするため、これは失敗します。

just適切なものを適切なタイミングで評価する/ コールの評価を遅らせる / 同様の戦略を作成するための良い方法は何ですか?

4

2 に答える 2

1

TL;DR私はしたくbuildsありませんでしたjust

からhypothesis.strategies:

def just(value):
    """Return a strategy which only generates value.

    Note: value is not copied. Be wary of using mutable values.

    """

一方(簡潔にするために編集):

def builds(target, *args, **kwargs):
    """Generates values by drawing from ``args`` and ``kwargs`` and passing
    them to ``target`` in the appropriate argument position.

    e.g. ``builds(target, integers(), flag=booleans())`` would draw an
    integer ``i`` and a boolean ``b`` and call ``target(i, flag=b)``.

だから私のオリジナル

@hypothesis.given(models(MyModel, bar=just(generate_test_user())))
def test_my_model(self, mymodel):
    pass

なりました

@hypothesis.given(models(MyModel, bar=builds(generate_test_user)))
def test_my_model(self, mymodel):
    pass

そして、すべてが私が望んでいgenerate_test_userた通りで、各テスト実行で正確に適切なタイミングで呼び出されました

于 2017-09-19T10:12:12.153 に答える