2011-01-08 11 views
11

Jeśli mam dochodzić w unittest.TestCase jak pokazano poniżej:Python: czy unittest może wyświetlać oczekiwane i rzeczywiste wartości?

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

Kiedy to się nie powiedzie, to daje komunikat „wiek nieprawidłowe”. To, co chciałbym zobaczyć, to wartości oczekiwane i rzeczywiste. Jaki jest najlepszy sposób na zrobienie tego? Czy może to zrobić coś, co może zrobić ktoś inny?

EDIT chciałbym zobaczyć coś takiego:

"wiek nieprawidłowy: wartość oczekiwana 42 Rzeczywista wartość 39"

+0

'self.assert' jest błąd składni. Masz na myśli 'self.assert_'. – delnan

+0

Dzięki. Tak, zamierzałem napisać aserTrue ... updated. –

Odpowiedz

8

Należy użyć obejście tego problemu, podobnie jak to:

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

Ale nie sądzę dostarczanie „msg” parametr jest najlepszym rozwiązaniem, ponieważ generuje tekst:

first != equal 

Większość (*) narzędzi do uruchamiania testów pokazuje również bezpośrednio, która linia nie powiodła się, dlatego powinieneś być w stanie zrozumieć, który test się nie powiódł i dlaczego, bez użycia dodatkowej wiadomości.

(*) przeczytać "wszystkie".

+0

Dzięki. Nie zdawałem sobie sprawy, że dodanie wiadomości nie było aktualne i oczekiwane. –

+1

To narusza zasadę [DRY] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). – Rockallite

+0

@Rockallite Czy przeczytałeś nawet * całą * odpowiedź? Uważam, że przegapiłeś wszystkie linie, z wyjątkiem dwóch pierwszych. – Bakuriu

5

patrz: assertEqual

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

lub z komunikatem domyślnym (aby odpowiedzieć na komentarz):

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

To nie działa dla mnie. Nadal wydrukowano "wiek nieprawidłowy", ale nie rzeczywistą wartość, tj. Wartość person.age. –

16

można ustawić atrybut longMessage do True

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

można dostać coś takiego:

AssertionError: 42 != 39 : age incorrect 

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

+0

to _exactly_, co moim zdaniem powinno istnieć. Doskonała odpowiedź! –

+0

To powinna być zaakceptowana odpowiedź. Dzięki Noel! – DylanYoung

Powiązane problemy