2010-09-01 7 views

Odpowiedz

6

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

Dlatego brzydkie self.assert<Foo> metody zostały wprowadzone w unittest.TestCase zamiast ładnie i krótko stwierdza: self.assert<Foo> metody wiedzieć jak do wyświetlania komunikatów o błędach.

Nawiasem mówiąc, myślałem, że nos zrobić jakąś czarną magię tak w prostych przypadkach

assert a == b

powinna wykazać znaczący komunikat o błędzie.

+0

Dzięki, powinienem używać self.assert. Możesz pozwolić Nosowi pokazać więcej informacji za pomocą -d. Wyświetli typ, ale nie rzeczywistą wartość. – Pickels

+1

Właśnie zauważyłem, dlaczego powiedziałeś, że są brzydcy. Nawiasy i nie == ... fuj. – Pickels

+0

@Pickels W dzisiejszych czasach możesz użyć [pytest] (http://doc.pytest.org/en/latest/). Zachęca on do czystych deklaracji, ale wykonuje pewne analizy kodu, aby upiększyć wyniki awarii, aby uzyskać najlepsze z obu światów. – augurar

22

Powinieneś uruchomić nosetests -d to wyświetli wartości obiektów, które zawiodły porównania w assert.

+2

To powinna być zaakceptowana odpowiedź. – ford

+0

Nie, nadal jest to obiekt " .uidNumber == 1001" zamiast czegoś podobnego "oczekiwano 1001, ale otrzymałem 1002" – badbishop

1

Inna możliwość: zdefiniować własną funkcję, która załatwia sprawę:

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

można nazwać to zamiast assert:

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

I to wraca ten miły błąd:

AssertionError

+0

Super! Zastanawiam się, czy dodasz trzeci parametr - opis testu, to znaczy - nie musisz nawet definiować osobnej metody dla każdego prostego testu, prawda? Zasadniczo będzie wyglądać jak odpowiednik metody ok() Perla z Test :: More. – badbishop

+0

@badbishop Opisana przeze mnie metoda może działać we wszystkich testach. Ale tak, można go dostosować, dodając trzeci parametr z komunikatem (może być opcjonalny, a domyślny komunikat to ten, który opisałem). –