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

时间:2015-07-08 09:16:44

标签: django django-testing django-tests

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

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

为了清楚起见,测试(即:object.save())对数据库所做的任何更改是否会自动重置?或者这些变化是否需要在测试中反过来?

1 个答案:

答案 0 :(得分:11)

如果您使用的是Django的默认as.character(factor(a, c(1, 2, 3), c("foo", "bar", "baz"))) # [1] "foo" "bar" "baz" "baz" "bar" "baz" "foo" "bar" "foo" ,则所有测试都在一个事务中运行,该事务在测试结束时回滚。如果您的数据库支持事务,则不必清理任何内容。

如果您使用的是Django的TestCaseLiveServerTestCase,则每次测试后都会截断所有表,并且在测试之前序列化的初始数据会重新加载到测试数据库中。这不会为迁移的应用保留任何数据,仅适用于未迁移的应用。

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