Как я могу получить юнит-тест Python, чтобы не перехватывать исключения?
Я работаю над проектом Django, но я думаю, что это чистый Python unittest
вопрос.
Обычно, когда вы запускаете тесты, исключительные ситуации будут перехватываться тестовым исполнителем и обрабатываться соответствующим образом.
В целях отладки я хочу отключить это поведение, т. Е. Чтобы:
python -i manage.py test
как обычно, взломает интерактивную оболочку Python.
Как это сделать?
РЕДАКТИРОВАТЬ: основываясь на ответах до сих пор, кажется, что это больше специфический для Django вопрос, чем я понял!
3 ответа
Вы можете использовать тест -джанго-нос, он работает с unittest
тесты, и запускайте свои тесты как python manage.py test -v2 --pdb
, И нос побежит за тобой.
Новое приложение django-pdb делает это лучше, поддерживая режим для взлома тестовых сбоев или необработанных исключений в обычном коде.
Вы можете попробовать что-то подобное в модуле вашего пакета, а затем использовать CondCatches(
ваши исключения,)
в вашем коде:
# System Imports
import os
class NoSuchException(Exception):
""" Null Exception will not match any exception."""
pass
def CondCatches(conditional, *args):
"""
Depending on conditional either returns the arguments or NoSuchException.
Use this to check have a caught exception that is suppressed some of the
time. e.g.:
from DisableableExcept import CondCatches
import os
try:
# Something like:
print "Do something bad!"
print 23/0
except CondCatches(os.getenv('DEBUG'), Exception), e:
#handle the exception in non DEBUG
print 'Somthing has a problem!', e
"""
if conditional:
return (NoSuchException, )
else:
return args
if __name__ == '__main__':
# Do SOMETHING if file is called on it's own.
try:
print 'To Suppress Catching this exception set DEBUG=anything'
print 1 / 0
except CondCatches(os.getenv('DEBUG'), ValueError, ZeroDivisionError), e:
print "Caught Exception", e