Я пытаюсь переключить пакет юнит-тестов Django на использование PostgreSQL в качестве бэкэнда. Изменение настроек теста Django было, наконец, тривиальным, но теперь я получаю много мелких ошибок, когда тесты загружают приборы. После нескольких часов работы я обнаружил, что проблема была в том, что Django не сбрасывает счетчики идентификаторов в таблицах, поэтому, несмотря на то, что все строки удаляются из каждой таблицы между тестами, все новые приборы не используют идентификаторы в устройстве, а вместо этого используютId это 1 плюс максимальный Id, использованный в последнем тесте.
Очень расстраивает. Так что я покопался в коде, чтобы понять, почему это происходит, и было ли это ошибкой в моем использовании Django 2.2, и я обнаружил, что django.test.TransactionTestCase
даже имеет изящный маленький _reset_sequences()
метод для сброса всех последовательностей таблиц между тестами.
Однако я использую стандарт django.test.TestCase
, и по какой-то причине в методе _fixture_setup()
он явно отключает _reset_sequences()
и выдает ошибку:
AssertionError: reset_sequences cannot be used on TestCase instances
если ты попытаешься это назвать. Почему это так?
Так как Django не может сбросить счетчики таблиц и нарушает мои юнит-тесты. Почему последовательности таблиц не могут быть сброшены в стандартном TestCase?