【发布时间】:2011-02-15 20:35:28
【问题描述】:
Django (1.2 beta) 将在每个运行的测试之间重置数据库,这意味着每个测试都在一个空数据库上运行。但是,数据库并未刷新。刷新数据库的影响之一是 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 不会在每个测试之间刷新数据库,所以也许有一个很好的理由。有人知道吗?
【问题讨论】:
标签: database django unit-testing