1

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

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

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

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

4

1 回答 1

2

如果您考虑为测试定义测试数据的最简洁方式,我建议您阅读有关django-any 应用程序的内容:

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)

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

于 2011-12-17T14:33:53.940 回答