Po pracy z wyjątkami w Javie i .NET ORAZ po przeczytaniu wielu artykułów o tym, jak / kiedy / dlaczego łapać wyjątki, w końcu wymyśliłem następujące kroki, które przechodzę w mojej głowie, gdy widzę potencjalny wyjątek lub wyjątek Muszę złapać (Java) ... nawet jeśli to się nigdy nie zdarzy (westchnienie ...). I wydaje się, że działa, przynajmniej dla mnie:
- Czy jest coś przydatnego, co mogę zrobić z tym wyjątkiem (oprócz rejestrowania)? Jeśli odpowiedź brzmi tak, napisz kod obejścia, a jeśli obejście może powodować wyjątki, przejdź do 2:
- Owiń wyjątek wokół wyjątku środowiska wykonawczego, wyrzuć go, przejdź do 3.
- W klasie wyższego poziomu, w której zainicjowano możliwą transakcję bazy danych / procesu, złap wyjątek, wycofaj transakcję, zwróć wyjątek.
- W klasie najwyższego poziomu (która może być tą, w której transakcja została zainicjowana) zaloguj wyjątek za pomocą środowiska rejestrowania, takiego jak slf4j ( na przykład w połączeniu z log4j ) lub log4net . Jeśli to możliwe, wyślij e-mailem wyjątek bezpośrednio na listę dystrybucyjną złożoną z programistów aplikacji.
- Jeśli istnieje GUI, wyświetl komunikat o błędzie wskazujący w najbardziej przyjazny dla użytkownika sposób, co spowodowało problem; nie wyświetlaj wyjątku / stacktrace, użytkownik nie dba o to i nie musi wiedzieć, że był to wyjątek NullPointerException.
Powinienem również dodać krok 0 , w którym celowo rzucam coś, co nazywam wyjątkiem „biznesowym” (nowy wyjątek, który tworzę, rozszerzając klasę „wyjątek”), gdy niektóre złożone leczenie nie może zostać wykonane z powodu błędów danych, ALE zdarzają się, ponieważ podczas analizy zostały zidentyfikowane jako przypadki wyjątków.
Z wyjątkiem części dotyczącej logowania, w pełni zgadzam się z punktami napisanymi przez „mikera”; Dodam tylko, że wyjątek należy zarejestrować tylko raz .
Ponadto wymienione przeze mnie kroki mogą się różnić, jeśli piszesz jako API / Framework . Tam rzucanie dobrze zaprojektowanych wyjątków jest obowiązkowe, aby pomóc programistom zrozumieć ich błędy.
Jeśli chodzi o testowanie wyjątków, za pomocą próbnych obiektów powinieneś być w stanie przetestować prawie wszystko, niezależnie od tego, czy jest to wyjątek, czy nie, pod warunkiem, że twoje klasy przestrzegają najlepszej praktyki „jedna klasa do robienia jednej rzeczy”. Osobiście upewniam się, że najważniejsze, ale ukryte metody są oznaczone jako „chronione” zamiast „prywatne”, dzięki czemu mogę je przetestować bez większych problemów. Poza tym testowanie wyjątków jest proste, po prostu sprowokuj wyjątek i „spodziewaj się”, że wyjątek wystąpi, wychwytując go. Jeśli nie otrzymasz wyjątku, oznacza to, że wystąpił błąd przypadku testowego jednostki.