Robię testy jednostkowe.
Próbuję przetestować jedną funkcję.
Nazywam to z mojego komponentu testowego. Ale jeśli zdalna funkcja nie może obsłużyć wyjątku, mój komponent testujący również dostanie wyjątek, tak myślę.
Czy powinienem się martwić o uzyskanie wyjątku w moim komponencie testera?
Dzięki.
EDYTOWAĆ:
PS:
Zgłoszenie błędu jest dobre, ale tylko w przypadku innych funkcji, nie do użytkowników końcowych, dopóki nie jest to ostatnia opcja!
OMG Napisałem wycenę programowania !!
testing
unit-testing
exceptions
Vikas
źródło
źródło
Odpowiedzi:
Krótka odpowiedź: NIE.
Nie wychwytuj wyjątków w testach jednostkowych. Testujesz jednostki, aby znaleźć błędy i sytuacje, w których zgłaszane są wyjątki.
Struktura testów jednostkowych powinna obsługiwać wyjątki w rozsądny sposób. Większość (jeśli nie wszystkie) frameworki xUnit mają konstrukcję umożliwiającą oczekiwanie pewnych wyjątków, których używasz, gdy chcesz wywołać określony warunek wyjątku w testowanym systemie i mają pozytywny wynik testu, jeśli oczekiwany wyjątek zostanie zgłoszony, ale zawiodą, jeśli nie.
źródło
(W przeciwieństwie do odpowiedzi Mcottle'a) Długa odpowiedź: NIE ... przez większość czasu
Kiedy powiesz, że spodziewasz się, że test zgłosi określony wyjątek, będziesz wiedział, kiedy DOWOLNA linia w tym teście zgłosi ten wyjątek.
To nie całkiem to samo, co wiedząc, że testowana metoda zgłasza wyjątek.
Jeśli Twój test obejmuje ustawienie obiektu lub kontekstu (w ramach testu, a nie w twojej wersji frameworka
SetUp
), lepiej opuść pojedynczą linię, którą faktycznie chcesz przetestować w try / catch, być może z pomocą pomocnika.Na przykład,
i wtedy
Jeśli ten test się nie powiedzie, wiem, że moja testowana metoda zgłosiła wyjątek, a nie coś w przypadkowej konfiguracji.
(Powinieneś unikać losowych ustawień instalacyjnych. Czasami łatwiej jest mieć jakiś kod instalacyjny w teście).
źródło
Ogólnie rzecz biorąc, powinieneś po prostu zwolnić wyjątek, a środowisko testowe da ci fajny raport ze wszystkimi potrzebnymi informacjami.
Jednak w metodyce TDD oczekuje się, że wykonamy następujące kroki:
Po zwolnieniu wyjątku, jeśli błąd jest wyraźny, jest w porządku. Ale czasami wyjątek jest niejasny, a nawet mylący. Jak mogłeś pozwolić, by znalazło się to w twoim kodzie (dla ciebie później, kiedy zapomnisz lub dla członka zespołu, który straci dużo czasu na rozwikłanie problemu)? Zatem moja zasada brzmi: „ Jeśli konieczne jest usunięcie awarii, musisz złapać wyjątek ”.
źródło