【发布时间】:2010-11-19 05:32:39
【问题描述】:
我正在使用 Django 开发一个 Web 项目,并且正在使用 python unittest 框架。对于每个应用程序,我都有一些固定装置。这意味着,每个应用程序在固定装置中都有一些相同的表。我想在应用程序和测试用例之间共享固定装置,否则如果我更改模型,我将不得不更改引用此具体表的所有 json 固定装置。
使用全局固定装置是否明智?
【问题讨论】:
标签: python django unit-testing
我正在使用 Django 开发一个 Web 项目,并且正在使用 python unittest 框架。对于每个应用程序,我都有一些固定装置。这意味着,每个应用程序在固定装置中都有一些相同的表。我想在应用程序和测试用例之间共享固定装置,否则如果我更改模型,我将不得不更改引用此具体表的所有 json 固定装置。
使用全局固定装置是否明智?
【问题讨论】:
标签: python django unit-testing
我强烈建议您查看 Django 的 Testing architecture。特别检查 TestCase.fixtures;这比 unittest 更高级且特定于 Django。
【讨论】:
只要您在tearDown 方法(或teardown_test_environment 方法 - 见下文)中删除它们,我想不出使用全局固定装置有什么问题。
我不确定您是否要求了解如何执行此操作。如果是这样,我可以想到两种方法。
为所有测试使用通用基类。像这样的:
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
使用自定义测试运行器。在您的测试运行器中,在运行测试之前加载您需要的所有固定装置,并在执行测试后将它们取下来。您最好使用自己的 setup_ 和 teardown_test_environment 方法来执行此操作。
【讨论】:
不要使用静态装置,这是一种糟糕的自动化测试模式。使用动态装置。
Django Dynamic Fixture 具有创建全局固定装置的选项。检查其Nose plugin 或Shelve option。
【讨论】: