2014-07-06 15 views
7

Zajmuję się tworzeniem usługi internetowej JSON przy użyciu Go-Json-Rest. Piszę testy.Błąd vs Śmiertelny w testach

... 
recorded = test.RunRequest(t, &api.Handler, 
    test.MakeSimpleRequest("POST", "http://localhost/api/products", 
     product)) 
recorded.CodeIs(201) 
recorded.ContentTypeIsJson() 

var newProduct Product 
err := recorded.DecodeJsonPayload(&newProduct) 
if err != nil { 
    t.Fatal(err) 
} 
... 

Używam Fatal jak idę z Pythona świata gdzie assert natychmiast zatrzymać przypadków testowych wykonanie metody. I to ma sens: dlaczego próbujesz odkodować dane, jeśli to nie JSON?

Ale inne testy, które widziałem, używają Error, co nie zatrzymuje wykonania testu.

Czego powinienem używać w testach? Error lub Fatal?

Odpowiedz

9

Wydaje mi się, że używasz Error, dopóki dalsze prowadzenie testu nie może dostarczyć więcej informacji przydatnych w debugowaniu, wtedy używasz Fatal. A jeśli nie masz pewności (np. Jeśli używasz sprawdzonej metody, takiej jak CodeIs do użycia w kontekście wielu różnych testów), przejdź na stronę Error, ponieważ generalnie nie robisz szkód przez kontynuowanie uruchomić test.

Zgodnie z tymi kryteriami ma sens, aby Fatal przy nieudanym dekodowaniu JSON, po którym, jak mówisz, nic ciekawego się nie stanie. I jest zrozumiałe, że używają one metod, które będą używane w różnych testach.

Inny przykład może lepiej zilustrować, dlaczego warto używać Error, dopóki nie będzie wiadomo, że nic ciekawego się nie wydarzy: powiedzmy, że chcesz sprawdzić stan psychiczny kilku różnych rzeczy dotyczących odpowiedzi JSON, a każdy podzbiór może być nieprawidłowy. (Podobnie, twój interfejs API produktu może zwrócić price używając niewłaściwego typu, lub może nie zwrócić pustych description s, gdy tego nie chcesz lub ...) Używanie Error zamiast Fatal dla każdego czeku oznacza, że ​​twój test zawsze będzie działał wszystkie i zgłoś, które z nich zawiodły.