Django单元测试与全局数据文件

4 投票
3 回答
4322 浏览
提问于 2025-04-15 13:34

我正在做一个Django的网页项目,使用的是Python的unittest框架。对于每个应用,我都有一些固定的数据,这些固定的数据在不同的应用中是一样的。也就是说,每个应用都有一些相同的表格数据。我希望能在不同的应用和测试用例之间共享这些固定的数据,因为如果我改动了某个模型,我就得去修改所有引用了这个表格的json固定数据,太麻烦了。

使用全局的固定数据是否合理呢?

3 个回答

1

我觉得使用全局的测试准备数据没什么问题,只要你在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方法来完成这个。

2

不要使用静态数据,这是一种不好的自动化测试方式。应该使用动态数据。

Django动态数据工具提供了创建全局数据的选项。可以查看它的Nose插件或者Shelve选项

2

我非常推荐你去了解一下Django的测试架构。特别是看看TestCase.fixtures,这个比unittest要复杂得多,而且是专门为Django设计的。

撰写回答