2011-12-13 14 views
6

Sto usando expectedFailure perché c'è un bug che voglio registrare che non posso correggere in questo momento, ma voglio tornare ad esso in futuro. La mia comprensione di expectedFailure è che conterebbe il test come passato ma nel riepilogo dico che ci sono stati x il numero di errori previsti (simile al modo in cui funziona con i taccetti saltati).expectedFailure viene conteggiato come errore anziché come passato

Tuttavia, quando eseguo il mio suite di test ottengo il seguente:

$ ./manage.py test eav.QueryTest 
Creating test database for alias 'default'... 
.EE 
====================================================================== 
ERROR: test_q_object_with_exclude (eav.tests.managers.QueryTest) 
---------------------------------------------------------------------- 
_ExpectedFailure 

====================================================================== 
ERROR: test_q_objects_unioned (eav.tests.managers.QueryTest) 
---------------------------------------------------------------------- 
_ExpectedFailure 

---------------------------------------------------------------------- 
Ran 3 tests in 1.095s 

FAILED (errors=2) 
Destroying test database for alias 'default'... 

Non sono sicuro se questo si trova con test runner di Django o qualcosa che sto facendo male.

@unittest.expectedFailure 
def test_q_object_with_exclude(self): 
    # Everyone except Bob 
    q_set = eav_m.Process.objects.exclude(
     Q(eav__details__city__contains='Y')) 
    self.assertEqual(q_set.count(), 4) 

risposta

7

La tua comprensione di expectedFailure è corretta. Il tuo problema è che quei test non falliscono sollevano un'eccezione che non è come fallire.

Il decoratore che stai cercando è skip.

+1

@JonathanHartley Non proprio. I test falliscono in 2 modi. Se falliscono perché alcuni affermano fallito, allora lo stato è "FAIL", ma se c'è un crash come un'eccezione sollevata, allora lo stato è "ERRORE". expectedFailure significa che ti aspetti che un test fallisca, ma ciò non significa che ti aspettavi un crash. – binW

0

No, il fallimento atteso non è lì per aiutarti a scrivere test negativi, utilizzare self.assertNotEqual per questo. expectedFailure è usato per contrassegnare un test che sai essere rotto e tu lo riconosci. Non fallendo, sta dicendo che la tua conferma non è valida.

+0

Grazie per la risposta, ma non sto cercando di scrivere un test negativo. Nel codice di esempio sopra 'self.assertEqual (q_set.count(), 4)' è corretto. Il conteggio dovrebbe essere 4, ma c'è un bug che lo fa restituire un valore diverso e fallire. Da qui la necessità di usare 'expectedFailure'. – Jashugan

+0

I downvote questa risposta perché non risolve il problema. – Stan

0

Si dovrebbe dare un'occhiata a SO question perché questo non è il comportamento corretto. Un test con expectedFailure decoratore should not be counted as a failure se il test fallisce.

+1

Grazie per l'avviso. Non ho ancora provato a ricostruire tutto da zero. Comunque, ho eseguito 'sudo find/opt -type f -regex. * \. Pyc -delete' sulla teoria che forse c'erano dei file pyc compilati che causavano il problema. Sfortunatamente questo non risolve il problema. – Jashugan

Problemi correlati