2012-08-31 10 views
5

Sto lavorando a un progetto Django ma penso che questa sia una domanda pura Python unittest.Come posso ottenere l'unittest di Python per non rilevare le eccezioni?

Normalmente, quando si eseguono i test, le eccezioni verranno catturate dal test runner e gestite di conseguenza.

Per scopi di debug, voglio disattivare questo comportamento, cioè in modo che:

python -i manage.py test 

romperà nella shell Python interattiva su un'eccezione, come normale.

Come fare?

MODIFICA: sulla base delle risposte finora, sembra che questa sia più una questione specifica di Django di quanto mi aspettassi!

risposta

4

È possibile utilizzare il test runner django-nose, funziona con i test unittest ed eseguire i test come python manage.py test -v2 --pdb. E il naso funzionerà per te pdb.

+0

Grazie. Ho sentito parlare molto del naso con vari benefici come questo, ed è sulla mia lista delle cose da imparare, ma per ora spero che ci sia un modo per farlo senza di esso. Sai se non è assolutamente possibile con il test runner standard? – Ghopper21

+0

Non è bello, ma puoi catturare l'eccezione nel tuo codice ed eseguire pdb. –

+0

FYI, sto cercando di capire come installare il django-nose, che sembra fantastico. Mi sta dando problemi finora ... Vedi http://stackoverflow.com/questions/12215520/how-to-get-django-nose-installed-correctly – Ghopper21

3

Una nuova app django-pdb rende questo più bello, supportando una modalità per interrompere i fallimenti di test o le eccezioni non rilevate nel codice normale.

+0

Interessante! Sto dando un'occhiata ... – Ghopper21

+0

+1, questo funziona bene con il nuovo flag 'manage.py test --pdb'. Ora sto cercando di installare il django-nose in modo da poter confrontare i due approcci. (A proposito, continuerò ad usare django-pdb comunque per gli altri miglioramenti del debug.) – Ghopper21

0

si potrebbe provare qualcosa di simile in un modulo all'interno del vostro pacchetto, quindi utilizzare CondCatches(vostre eccezioni,) nel codice:

# 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 
Problemi correlati