Django 测试:--keepdb 会重置测试期间所做的更改吗?

Django Testing: Does --keepdb reset changes made during tests?

根据有关测试的 Django 文档,--keepdb 标志将保留测试数据库以供将来运行。

https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---keepdb

明确一点,测试对数据库所做的任何更改(即:object.save())是否会自动重置?还是需要在测试中撤销这些更改?

如果您使用的是 Django 的默认值 TestCase,所有测试都是 运行 事务中的,测试完成时回滚。如果您的数据库支持事务,则无需清理任何内容。

如果您使用的是 Django 的 LiveServerTestCaseTransactionTestCase,所有表在每次测试后都会被 t运行 分类,并且在测试前序列化的初始数据是重新载入测试数据库。这不会保留已迁移应​​用程序的任何数据,只会保留未迁移应用程序的数据。

--keepdb 选项不会对数据库做任何特殊的事情。它只是防止测试数据库被破坏,如果在测试开始时找到数据库,则使用它而不是创建新数据库。因此,测试完成后以某种方式留在数据库中的任何数据都将被视为初始数据。如果某些错误或用户中断阻止没有交易的测试清理数据库,这将是最相关的。在这种情况下,重新创建数据库可能是个好主意。