首页 > 解决方案 > 在 PostgreSQL 上运行 Django 单元测试

问题描述

我正在尝试切换 Django unittest 套件以使用 PostgreSQL 作为其后端。更改 Django 测试设置最终变得微不足道,但现在当测试加载夹具时,我遇到了很多细微的错误。经过几个小时的修补,我发现问题是因为 Django 没有重置表上的 id 计数器,所以即使在测试之间从每个表中删除所有行,所有新的夹具都不使用夹具中的 ID,而是我们Id 是 1 加上上次测试中使用的最大 Id。

非常令人沮丧。所以我仔细研究了代码,看看为什么会发生这种情况,如果它是我使用 Django 2.2 中的一个错误,我发现它django.test.TransactionTestCase甚至有一个漂亮的小_reset_sequences()方法来重置测试之间的所有表序列。

但是,我使用的是标准django.test.TestCase,并且由于某种原因,在该_fixture_setup()方法中,它明确禁用_reset_sequences()并断言错误:

AssertionError: reset_sequences cannot be used on TestCase instances

如果您尝试调用它。为什么是这样?

照原样,Django 未能重置表计数器,并且正在破坏我的单元测试。为什么不能在标准 TestCase 中重置表序列?

标签: pythondjangopostgresql

解决方案


推荐阅读