Django(1.2 beta)将在每个运行的测试之间重置数据库,这意味着每个测试都在一个空的DB上运行。但是,数据库不是刷新的。刷新数据库的影响之一是auto_increment
计数器被重置。
考虑一个通过主键将数据从数据库中拉出的测试:
class ChangeLogTest(django.test.TestCase):
def test_one(self):
do_something_which_creates_two_log_entries()
log = LogEntry.objects.get(id=1)
assert_log_entry_correct(log)
log = LogEntry.objects.get(id=2)
assert_log_entry_correct(log)
这将通过,因为仅创建了两个日志条目。但是,如果将另一个测试添加到
ChangeLogTest
中,并且碰巧在 test_one
之前运行,则日志条目的主键不再是1和2,它们可能是2和3。现在test_one
失败了。这实际上是一个两部分的问题:
./manage.py test
在每个测试用例之间刷新数据库? 最佳答案
看一下django.core.management.commands.flush.py命令的实现。
您可以从测试调用内部调用flush命令(也许在TestCase.setUp中):
management.call_command('flush')
是的,有:加快速度。从json刷新并重新加载许多数据需要一段时间...
也许您应该看看TransactionTestCase