Подходит ли модульное тестирование Django к исключениям? - PullRequest
4 голосов
/ 01 ноября 2009

Я использую аппаратное тестирование 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 - он делает все с базой данных - и этот вызов сбрасывает обработку предупреждений перед вызовом моего кода.

1 Ответ

2 голосов
/ 03 ноября 2009

Учитывая обновленную информацию, я склонен сказать, что это правильная вещь для Django; Предупреждения MySQL могут указывать на любое количество вещей, включая потерю данных (например, MySQL будет предупреждать и молча обрезать, если вы попытаетесь вставить значение, большее, чем может содержать столбец), и это именно то, что вам нужно узнать о при тестировании. Поэтому, вероятно, лучше всего посмотреть на генерируемые предупреждения и изменить свой код, чтобы он больше не вызывал появление этих предупреждений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...