Ответ 1
Я обнаружил несколько проблем с моим охватом unit test, но, чтобы ответить на вопрос, который я опубликовал, две отдельные проблемы вызывают ошибки, которые я описал.
Django 1.11 более строг в создании своего экземпляра модели, и у нас есть некоторый старый тестовый код, который не был обновлен до новой структуры модели. Например, если вы используете модель User по умолчанию, в Django 1.8 вы можете сделать
from django.contrib.auth.models import User
User.objects.create(username="something", password="something", something="something")
Но в Django 1.11 он вызывает исключение "TypeError: 'something' is an invalid keyword argument for this function"
.
И вторая проблема заключается в том, что Django TestCase обертывает тестовые примеры двумя отдельными атомными блоками. Это помогает сохранить настройку уровня класса отдельно от настройки уровня экземпляра, но также создает тонкую проблему. Если тест сбой с ошибкой базы данных, вы никогда не увидите ошибку, потому что она происходит на тестовом уровне атома, а не в атомном классе. Атомный уровень уровня завершен, и соединение с базой данных отключено. После этого каждый тест будет терпеть неудачу с точной ошибкой django.db.utils.InterfaceError: connection already closed
, которую я видел. Переключение с TestCase на TransactionTestCase привело к тому, что многие из этих проблем были выставлены непосредственно в тестовом выпуске.