在django中管理灯具的正确方法

时间:2011-12-16 14:38:37

标签: django fixtures django-fixtures

今天我与我的同事讨论了如何在django应用程序中管理灯具。我们找不到能满足每个人的任何解决方案,所以我在这里问这个问题。

假设我们内部有非常大的django项目,其中包含十几个应用程序,每个应用程序都有带有多个TestClasses的tests.py文件。有了这个,我应该如何管理所有这些应用程序的测试数据? 从我的角度来看,有两种不同的方式:

  1. 为每个应用 test_data.json 文件单独存储所有数据。此文件将包含应用程序的 models.py 文件中定义的所有模型的测试数据,无论此数据的使用位置(可在不同应用程序的测试中使用)
  2. 在test_data.json中存储一些可能需要的常见数据(例如 auth.users ),并在单独的中存储每个 TestCase 的数据test_case.json 文件。
  3. 从我的角度来看,第二种方法似乎更清洁,但我想知道是否有人可以告诉我这些方法的具体利弊,或者可能建议其他方法?

1 个答案:

答案 0 :(得分:2)

如果您考虑为测试定义测试数据的最简洁方法,我建议您阅读django-any application

  

django-任何明确的旧式,大型和容易出错的替代品   隐含夹具文件。

     

django-any允许仅指定对test和填充重要的字段   以可接受的值随机休息。

     

它使测试变得干净且容易不受影响,无需读取夹具   文件。

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)

此解决方案有助于避免在执行测试时在数据库中保留额外数据。