Django单元测试与全局数据文件
我正在做一个Django的网页项目,使用的是Python的unittest框架。对于每个应用,我都有一些固定的数据,这些固定的数据在不同的应用中是一样的。也就是说,每个应用都有一些相同的表格数据。我希望能在不同的应用和测试用例之间共享这些固定的数据,因为如果我改动了某个模型,我就得去修改所有引用了这个表格的json固定数据,太麻烦了。
使用全局的固定数据是否合理呢?
3 个回答
1
我觉得使用全局的测试准备数据没什么问题,只要你在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
方法来完成这个。
2
不要使用静态数据,这是一种不好的自动化测试方式。应该使用动态数据。
Django动态数据工具提供了创建全局数据的选项。可以查看它的Nose插件或者Shelve选项。
2
我非常推荐你去了解一下Django的测试架构。特别是看看TestCase.fixtures,这个比unittest要复杂得多,而且是专门为Django设计的。