2010-09-01 16 views

risposta

6

assert result.file == file, "%s != %s" % (result.file, file,)

Ecco perché brutte self.assert<Foo> metodi sono stati introdotti nel unittest.TestCase invece di bello e di breve afferma: self.assert<Foo> metodi sanno come visualizzare i messaggi di errore.

A proposito, ho pensato che il naso fare un po 'di magia nera in modo nei casi più semplici

assert a == b

dovrebbe mostrare il messaggio di errore significativo.

+0

Grazie, dovrei usare self.assert. Puoi far mostrare a Nose più informazioni con -d. Mostrerà il tipo ma non il valore reale. – Pickels

+1

Appena notato perché hai detto che erano brutti. Parentesi e no == ... yuck. – Pickels

+0

@Pickels Al giorno d'oggi puoi usare [pytest] (http://doc.pytest.org/en/latest/). Incoraggia le asserzioni nulle ma esegue alcune analisi del codice per migliorare l'output di errore, in modo da ottenere il meglio da entrambi i mondi. – augurar

22

È necessario eseguire nosetests -d questo mostrerà i valori degli oggetti che non riescono il confronto in asserire.

+2

Questa dovrebbe essere la risposta accettata. – ford

+0

No, è ancora " .uidNumber == 1001" invece di qualcosa del tipo "atteso 1001, ottenuto 1002" – badbishop

1

Un'altra possibilità: definire una funzione che fa il trucco:

def assert_eq(obt, exp): 
    assert obt==exp, "\n*Expected:\n%s\n*Obtained:\n%s" % (exp, obt) 

così si può chiamare, invece di assert:

assert_eq (self.data['SQ'].code, "SQ") 

E questo restituisce questo bel errore:

AssertionError

+0

Super! Mi chiedo, se si aggiunge un terzo parametro - descrizione del test, cioè - non è nemmeno necessario definire un metodo separato per ogni semplice test, vero? Fondamentalmente, sembrerà equivalente al metodo ok() di Perl da Test :: Altro. – badbishop

+0

@badbishop Il metodo che ho descritto potrebbe funzionare per tutti i test. Ma sì, potrebbe essere personalizzato aggiungendo un terzo parametro con il messaggio (potrebbe essere opzionale con il messaggio predefinito che è quello che ho descritto). –