2011-01-08 10 views
11

Se ho un'asserzione in un unittest.TestCase come illustrato di seguito:Python: può unittest visualizzare i valori previsti e reali?

self.assertTrue(person.age == 42, "age incorrect") 

Quando non riesce, si dà il messaggio "l'età non corretta". Quello che vorrei anche vedere sono i valori attesi e reali. Qual è il modo migliore per farlo? E 'qualcosa che un unittest può fare?

EDIT mi piacerebbe vedere qualcosa di simile:

"l'età non corretta: valore atteso 42 valore effettivo 39"

+0

'self.assert' è un errore di sintassi. Intendi "auto.assert_". – delnan

+0

Grazie. Sì, ho intenzione di scrivere assertTrue ... aggiornato. –

risposta

8

Si dovrebbe usare una soluzione a questo problema, in questo modo:

self.assertEqual(person.age, 42, 'age incorrect: expected value {0} actual value {1}'.format(42, person.age)) 

Ma io non credo che fornisce i "msg" parametro è l'opzione migliore, dal momento che genera il testo:

first != equal 

La maggior parte degli strumenti (*) per l'esecuzione di test mostra direttamente quale linea ha fallito, quindi dovresti essere in grado di capire quale test è fallito e perché senza usare un messaggio extra.

(*) leggere "tutti".

+0

Grazie. Non mi ero reso conto che non aggiungendo il messaggio mi sembrava reale e atteso. –

+1

Questo viola il principio [DRY] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). – Rockallite

+0

@Rockallite Hai persino letto la * risposta * intera? Credo che ti siano perse tutte le linee tranne che per le prime due. – Bakuriu

5

vedi: assertEqual

self.assertEqual(person.age, 42, 'age incorrect') 

o con il messaggio predefinito (per rispondere al commento):

self.assertEqual(person.age, 42) 
+2

Questo non ha funzionato per me. Ha stampato ancora "età errata", ma non il valore effettivo, cioè il valore di person.age. –

16

è possibile impostare l'attributo longMessage al True

expected_age = 42 
actual_age = person.age # 39 
self.longMessage = True 
self.assertEqual(expected_age, actual_age, 'age incorrect') 

si potrebbe ottenere qualcosa di simile:

AssertionError: 42 != 39 : age incorrect 

di riferimento: https://docs.python.org/2/library/unittest.html#unittest.TestCase.longMessage

+0

questo è esattamente _ ciò che sentivo dovrebbe esistere. Ottima risposta! –

+0

Questa dovrebbe essere la risposta accettata. Grazie Noel! – DylanYoung

Problemi correlati