【问题标题】:Django TransactionTestCase with rollback emulation带有回滚仿真的 Django TransactionTestCase
【发布时间】:2015-05-27 10:10:40
【问题描述】:

我使用 Django 1.7.7 和 python 2.7.6 和 Postgres 作为数据库,我遇到了TransactionTestCase 的问题。在我的迁移中,我有两个 datamigrations,我希望它们在测试期间可用,因此我将 serialized_rollback = True 添加到我的测试用例 (https://docs.djangoproject.com/en/1.7/topics/testing/overview/#test-case-serialized-rollback)。

测试用例的第一次测试没问题,但随后 django 抱怨 IntegrityError:

IntegrityError: duplicate key value violates unique constraint "django_content_type_app_label_6032a1f08b99c274_uniq"
DETAIL:  Key (app_label, model)=(admin, logentry) already exists.

我设法通过在我的设置中添加以下内容 (https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-TEST_NON_SERIALIZED_APPS) 来运行测试并避免此错误:

TEST_NON_SERIALIZED_APPS = ['django.contrib.contenttypes',
                            'django.contrib.auth']

但我想知道为什么需要这样做?这是回滚中的错误还是我这边的问题?

【问题讨论】:

  • 您刚刚帮助我解决了 TransactionTestCase 测试中的一个非常大的问题。直到现在我才听说过 TEST_NON_SERIALIZED_APPS。谢谢。我认为这是因为 TransactionTestCase 似乎坏了。我的代码适用于 1.7.2,它在没有 TEST_NON_SERIALIZED_APPS 的情况下在 1.7.8 上停止。我(慢慢地)转向 py.test,我不知何故相信 pytest-django 固定装置会帮助我。最终。我对你的问题的回答?我认为你做的一切都很好,Django 1.7 ATM 需要整个体操。
  • 我同意,这是一问一答。非常感谢!我不确定为什么 Django 默认不序列化这些应用程序,因为在我的情况下,如果没有按照您的建议设置 TEST_NON_SERIALIZED_APPS,它就无法工作。

标签: python django postgresql testcase django-testing


【解决方案1】:

这个问题在 django 相关的ticket 中得到了很好的解释:https://code.djangoproject.com/ticket/23727

引用自那里:

当使用带有 serialized_rollback=True 的 TransactionTestCase 时,在创建数据库并运行其迁移(以及发出 post_migrate 信号)之后,数据库的内容将被序列化为 _test_serialized_contents。

在第一个测试用例之后,_fixture_teardown() 将刷新表,但随后会发出 post_migrate 信号并在 django_content_type 表中创建新行(带有新的 PK)。

然后在套件中的任何后续测试用例中,_fixture_setup() 会尝试反序列化 _test_serialized_contents 的内容,但这些行除了 PK 之外与数据库中已有的行相同。

由于 django_content_type 表中的唯一约束,这会导致 IntegrityError。

已创建/发布补丁,但仅适用于 Django 1.9.x。

对于以前的版本,你应该继续使用 TEST_NON_SERIALIZED_APPS 我猜...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2019-12-28
    • 2015-11-17
    • 2022-01-21
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多