2012-08-31 11 views
5

Pracuję nad projektem Django, ale myślę, że to jest pytanie Python unittest czystego.Jak mogę uzyskać zgodę Pythona na unikanie wyjątków?

Normalnie po uruchomieniu testów wyjątki zostaną przechwycone przez biegacz testowy i odpowiednio potraktowane.

Dla celów diagnostycznych, chce się wyłączyć tę funkcję, to znaczy tak, aby:

python -i manage.py test 

złamie się interaktywny Python powłoki na wyjątku, tak jak zwykle.

Jak to zrobić?

EDYCJA: w oparciu o dotychczasowe odpowiedzi, wygląda na to, że jest to raczej pytanie specyficzne dla Django, niż zdałem sobie z tego sprawę!

Odpowiedz

4

Można użyć testera testowego django-nose, działa on z testami unittest i uruchamia testy, takie jak python manage.py test -v2 --pdb. I nos będzie dla ciebie działać pdb.

+0

Dzięki. Wiele słyszałem o nosie z różnymi korzyściami, takimi jak ta, i to jest na mojej liście rzeczy do zrobienia, ale na razie mam nadzieję, że bez niej można to zrobić. Czy wiesz, czy jest to zdecydowanie niemożliwe przy standardowym biegaczu testowym? – Ghopper21

+0

To nie jest miłe, ale możesz złapać wyjątek w swoim kodzie i uruchomić pdb. –

+0

FYI, próbuję dowiedzieć się, jak zainstalować django-nos, który wygląda świetnie. Daje mi to kłopoty ... Zobacz http://stackoverflow.com/questions/12215520/how-to-get-django-nose-installed-correctly – Ghopper21

3

Nowa aplikacja django-pdb sprawia, że ​​jest to przyjemniejsze, obsługując tryb łamania błędów testowych lub nieprzechwyconych wyjątków w zwykłym kodzie.

+0

Interesujące! Przyjrzyj się ... – Ghopper21

+0

+1, działa to ładnie z nową flagą 'manage.py test --pdb'. Próbuję teraz zainstalować django-nose, więc mogę porównać te dwa podejścia. (Btw, nadal będę używał django-pdb dla innych ulepszeń debugowania.) – Ghopper21

0

można spróbować coś takiego w module wewnątrz pakietu, a następnie użyć CondCatches(swoje wyjątki,) w kodzie:

# 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 
Powiązane problemy