Django 1.7测试,丢失数据迁移数据

时间:2014-10-09 08:39:05

标签: python django unit-testing selenium

我有两个测试套件

  1. 使用django.test.TestCase进行单元测试
  2. 在django.contrib.staticfiles.testing.StaticLiveServerTestCase中使用selenium的功能测试
  3. 夹具系统非常糟糕,随着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.TestCasedjango.contrib.staticfiles.testing.StaticLiveServerTestCase之间的区别。

    有什么想法吗?

    编辑: 我做了一个简单的例子来说明和解释这个问题:https://github.com/eldamir/django_migration_bug/tree/master

0 个答案:

没有答案