在 django 中管理装置的正确方法

发布于 2024-12-21 16:56:27 字数 580 浏览 0 评论 0原文

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

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

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

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

today I had a discussion with my colleguaes about how we should manage fixtures in our django application. We cound not find any solution that would satisfy everyone, so I'm asking this question here.

Suppose we have quite big django project with dozen of applications inside, each application has tests.py file with several TestClasses. Having this, how I should manage test data for all of these applications?
From my perpective, there is 2 different ways:

  1. Store all data in separate for each application test_data.json file. This file will contain test data for all models defined in the application's models.py file, irrespective of where this data is used (it can be used in tests from different application)
  2. Store some common data that would be probably required by all tests (like auth.users) in test_data.json and data for each TestCase in a separate test_case.json file.

From my perpective, second approach seems to be more cleaner, but I would like to know if somebody could tell me the concrete pros and cons of these approaches or may be suggest some other approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃梦幻 2024-12-28 16:56:27

如果您考虑为测试定义测试数据的最简洁方法,我建议您阅读 django-任何应用程序

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

django-any 允许仅指定对测试重要的字段,并填充
随机休息并使用可接受的值。

它使测试干净且易于理解,无需读取固定装置
文件。

from django_any import any_model, WithTestDataSeed

类 TestMyShop(测试用例):
    def test_order_updates_user_account(self):
        帐户 = any_model(帐户, 金额=25, user__is_active=True)
        order = any_model(订单, user=account.user, amount=10)
        order.proceed()

        account = Account.objects.get(pk=account.pk)
        self.assertEquals(15, 账户.金额)

同样的方法也适用于表单(django_any.any_form)

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

If you think about the cleanest way to define test data for your tests, I would like to recommend you read about django-any application:

django-any the explicit replacement for old-style, big and error-prone
implicit fixture files.

django-any allows to specify only fields important for test, and fill
rest by random with acceptable values.

It makes tests clean and easy to undestood, without reading fixture
files.

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)

The same approach available for forms also (django_any.any_form)

This solution is helpful for avoiding to keep extra data in you DB while your tests are executing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文