1

今日、私は同僚とdjangoアプリケーションでフィクスチャを管理する方法について話し合いました。誰もが満足できる解決策は見つからないので、ここでこの質問をします。

数十のアプリケーションが含まれる非常に大きなdjangoプロジェクトがあり、各アプリケーションにいくつかのTestClassesを含むtests.pyファイルがあるとします。これがある場合、これらすべてのアプリケーションのテストデータをどのように管理する必要がありますか?私の見方からすると、2つの異なる方法があります。

  1. アプリケーションtest_data.jsonファイルごとにすべてのデータを個別に保存します。このファイルには、このデータが使用されている場所に関係なく、アプリケーションのmodels.pyファイルで定義されているすべてのモデルのテストデータが含まれます(さまざまなアプリケーションのテストで使用できます)。
  2. すべてのテスト( auth.usersなど)でおそらく必要となるいくつかの一般的なデータをtest_data.jsonに保存し、各TestCaseのデータを個別のtest_case.jsonファイルに保存します。

私の見方では、2番目のアプローチの方がクリーンなようですが、誰かがこれらのアプローチの具体的な長所と短所を教えてくれるか、または他のアプローチを提案できるかどうか知りたいですか?

4

1 に答える 1

2

テスト用のテストデータを定義する最もクリーンな方法について考える場合は、djangoについて読むことをお勧めします-任意のアプリケーション

django-古いスタイルの大きくてエラーが発生しやすい暗黙のフィクスチャファイルの明示的な置換。

django-anyを使用すると、テストに重要なフィールドのみを指定し、残りの部分に許容値をランダムに入力できます。

これにより、フィクスチャファイルを読み取ることなく、テストがクリーンになり、理解しにくくなります。

from django_any import any_model, WithTestDataSeed

class TestMyShop(TestCase):
    def test_order_updates_user_account(self):
        account = any_model(Account, amount=25, user__is_active=True)
        order = any_model(Order, user=account.user, amount=10)
        order.proceed()

        account = Account.objects.get(pk=account.pk)
        self.assertEquals(15, account.amount)

フォームでも利用できる同じアプローチ(django_any.any_form)

このソリューションは、テストの実行中にDBに余分なデータを保持しないようにするのに役立ちます。

于 2011-12-17T14:33:53.940 に答える