我有两个测试套件
夹具系统非常糟糕,随着Django 1.7推出了内置的迁移工具,它推荐数据迁移作为替代方案。我使用数据迁移来确保数据库中始终存在某些对象。在这种情况下,请考虑国家代码,州代码,货币名称等。
我的UnitTests运行得很好,直到运行我的功能测试,我发现的行为类似于在 https://groups.google.com/forum/#!topic/django-developers/wR6hTy9Nu2k。
想象一下类似下面的测试用例
class TestCustomerCreate(CustomerWithInvoicePaymentAndAllocationMixin, FunctionalTest):
def setUp(self):
super().setUp()
self.login_as_superman()
def test_can_create_customer(self):
# Do some testing ...
def test_cannot_create_customer_without_address(self):
# Do some testing ...
运行测试套件时,将设置数据库,并安装所有迁移。第一次测试,例如test_can_create_customer
开始,super().setup()
运行以设置测试的基础,然后测试检查它需要检查的内容。在第一次测试期间,我的初始数据存在,但是当测试完成时,刷新数据库以准备第二次测试test_cannot_create_customer_without_address
。所以在第二次测试中,我没有我的初始数据。没有货币,没有国家代码,没有任何东西。
现在,我的UnitTests似乎在幕后解释了这一点。我没有问题。但是在我的FunctionTests中,这个问题打破了一切,我无法理解它。
CustomerWithInvoicePaymentAndAllocationMixin
只是一个覆盖setUp()
的类,用于为不同的测试设置阶段。它与UT和FT中使用的是同一类,因此没有问题。据我所知,问题在于django.test.TestCase
和django.contrib.staticfiles.testing.StaticLiveServerTestCase
之间的区别。
有什么想法吗?
编辑: 我做了一个简单的例子来说明和解释这个问题:https://github.com/eldamir/django_migration_bug/tree/master