Я использую аппаратное тестирование Django (manage.py test), которое выдает ошибку и останавливается, когда код генерирует предупреждение. Этот же код при тестировании с помощью стандартного модуля Python unittest генерирует предупреждения, но продолжает выполнение кода через них.
Небольшое исследование показывает, что Python может быть настроен на выдачу предупреждений исключениям, что, как я полагаю, заставит среду тестирования думать, что произошла ошибка. К сожалению, документация Django по тестированию немного освещает определение «ошибки» или как изменить обработку предупреждений.
Итак: настроена ли среда модульного тестирования Django для выдачи предупреждений об ошибках по умолчанию? Есть ли какая-то возможность в Django изменить это поведение? Если нет, есть ли у кого-нибудь предложения, как я могу Django распечатать ошибки, но продолжить выполнение кода? Или я полностью ошибся в диагностике проблемы?
UPDATE:
Тестовый код останавливается на предупреждениях, генерируемых вызовами MySQLdb. Эти вызовы выполняются модулем, который выдает те же предупреждения при тестировании в рамках Python unittest, но не останавливается. Я подумаю об эффективном способе попытаться повторить ситуацию в коде, достаточно кратком для публикации.
ОТВЕТ:
Еще немного исследований показывают, что это поведение связано с бэкэндом MySQL от Django:
/ USR / ... Джанго /.../ тузд / base.py:
if settings.DEBUG:
...
filterwarnings("error", category=Database.Warning)
Когда я изменяю settings.py, поэтому DEBUG = False, код выдает предупреждение, но не останавливается.
Раньше я не сталкивался с таким поведением в Django, потому что мои вызовы базы данных генерируются моим собственным бэкэндом. Так как я не вызывал бэкэнд Django, я не сбросил обработку предупреждений, и код продолжался, несмотря на предупреждения. Тестовый фреймворк Django наверняка вызывает бэкэнд Django - он делает все с базой данных - и этот вызов сбрасывает обработку предупреждений перед вызовом моего кода.