【问题标题】:Proper way to manage fixtures in django在 django 中管理灯具的正确方法
【发布时间】:2012-01-22 01:40:32
【问题描述】:

今天我和我的同事讨论了我们应该如何管理 django 应用程序中的固定装置。我们找不到任何可以满足所有人的解决方案,所以我在这里提出这个问题。

假设我们有一个相当大的 django 项目,里面有 几十个应用程序,每个应用程序都有带有几个 TestClass 的 tests.py 文件。有了这个,我应该如何管理所有这些应用程序的测试数据? 从我的角度来看,有两种不同的方式:

  1. 为每个应用程序 test_data.json 文件单独存储所有数据。此文件将包含应用程序 models.py 文件中定义的所有模型的测试数据,无论该数据在何处使用(可用于来自不同应用程序的测试)
  2. 将所有测试(如 auth.users)可能需要的一些通用数据存储在 test_data.json 中,并将每个 TestCase 的数据存储在单独的 中test_case.json 文件。

从我的角度来看,第二种方法似乎更干净,但我想知道是否有人可以告诉我这些方法的具体优缺点,或者可能会建议其他方法?

【问题讨论】:

    标签: django fixtures django-fixtures


    【解决方案1】:

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

    django-any 旧式、大且容易出错的显式替换 隐式夹具文件。

    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)

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

    【讨论】:

    • 还可以查看带有关联的基于工厂的测试数据生成。 github.com/dnerdy/factory_boy
    • 实际上,在django-any出现一些问题后,我开始使用factory_boy应用程序:)
    猜你喜欢
    • 2015-04-04
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多