在Django单元测试中测试手动交易

时间:2018-07-04 01:34:04

标签: python django django-unittest

如何在Django单元测试中测试禁用autocommit并使用保存点的代码?

默认的Django unittest类将所有测试包装在@atomic装饰器中(通常正是您想要的装饰器),以确保在测试之间重置sqlite数据库。但是,任何从测试中碰到transaction.set_autocommit()的代码都会引发错误:

TransactionManagementError: This is forbidden when an 'atomic' block is active.

即使在单元测试之外也可以正常工作。

您如何在单元测试中临时禁用事务自动提交,以便可以测试手动提交?

1 个答案:

答案 0 :(得分:0)

使用TransactionTestCase

  

TransactionTestCaseTestCase相同,除了将数据库重置为已知状态的方式以及测试代码测试提交和回滚的效果的能力:A {{1}测试运行后通过截断所有表来重置数据库。 TransactionTestCase可以调用提交和回滚,并观察这些调用对数据库的影响。