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不会在每个测试之间刷新数据库,因此也许有充分的理由。有人知道吗?
  • 最佳答案



    看一下django.core.management.commands.flush.py命令的实现。

    您可以从测试调用内部调用flush命令(也许在TestCase.setUp中):

    management.call_command('flush')
    



    是的,有:加快速度。从json刷新并重新加载许多数据需要一段时间...

    也许您应该看看TransactionTestCase

    10-05 17:47
    查看更多