Django (бета-версия 1.2) будет сбрасывать базы данных между каждым тестом, что означает, что каждый тест выполняется на пустой БД. Однако базы данных не сброшены . Одним из эффектов очистки базы данных является сброс счетчиков 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 по умолчанию не очищает БД между каждым тестом, возможно, есть веская причина. Кто-нибудь знает?