【问题标题】:django unit testing and global fixturesdjango 单元测试和全局夹具
【发布时间】:2010-11-19 05:32:39
【问题描述】:

我正在使用 Django 开发一个 Web 项目,并且正在使用 python unittest 框架。对于每个应用程序,我都有一些固定装置。这意味着,每个应用程序在固定装置中都有一些相同的表。我想在应用程序和测试用例之间共享固定装置,否则如果我更改模型,我将不得不更改引用此具体表的所有 json 固定装置。

使用全局固定装置是否明智?

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    我强烈建议您查看 Django 的 Testing architecture。特别检查 TestCase.fixtures;这比 unittest 更高级且特定于 Django。

    【讨论】:

    • 感谢您的回答,我使用 Django TestCase。我的问题不是关于使用 Django 测试用例,而是关于重用固定装置。如果有人对此有不好的体验。
    • fixtures 属性遵循与 loaddata:docs.djangoproject.com/en/dev/ref/django-admin/… 相同的加载规则,因此您可以将常用的fixture 文件放在一个应用程序中并从所有测试用例中加载它。
    【解决方案2】:

    只要您在tearDown 方法(或teardown_test_environment 方法 - 见下文)中删除它们,我想不出使用全局固定装置有什么问题。

    我不确定您是否要求了解如何执行此操作。如果是这样,我可以想到两种方法。

    1. 为所有测试使用通用基类。像这样的:

      class TestBase(django.test.TestCase):
          fixtures = ['common_fixtures.xml']
      
      class MyTestClass(TestBase):
          fixtures = TestBase.fixtures + ['fixtures_for_this_test.xml']
      
          def test_foo(self):
              # test stuff
      
    2. 使用自定义测试运行器。在您的测试运行器中,在运行测试之前加载您需要的所有固定装置,并在执行测试后将它们取下来。您最好使用自己的 setup_teardown_test_environment 方法来执行此操作。

    【讨论】:

    • 这个样子的 JSON 夹具是什么?除了本地应用之外,我无法找到它
    • 如果您使用自定义测试运行器,您需要在 setup_databases 中创建测试数据库后加载您的设备,而不是在 setup_test_environment 期间。
    • 在 Django 1.8 中,将通用测试库子类化似乎不适用于固定装置。有其他选择吗?
    【解决方案3】:

    不要使用静态装置,这是一种糟糕的自动化测试模式。使用动态装置。

    Django Dynamic Fixture 具有创建全局固定装置的选项。检查其Nose pluginShelve option

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2013-05-23
      • 2011-01-17
      相关资源
      最近更新 更多