JUnit 4 i Suspend-on-Exception

Gdy w moim kodzie zostanie zgłoszony nieprzechwycony wyjątek, przyzwyczaiłem się do zatrzymania debugera w instrukcji rzucania, dzięki czemu mogę zbadać zmienne lokalne i członków wszystkich zaangażowanych obiektów w momencie zgłoszenia wyjątku. ZIntelliJ Idea można to osiągnąć, przechodząc doBiegać, Wyświetl punkty przerwania, wybierającPunkty wyjątkowe wyjątku karta, sprawdzanieDowolny wyjąteki upewniając się, żeZłapany wyjątek pole wyboru jest odznaczone, podczas gdyNiezłapany wyjątek pole wyboru jest zaznaczone. ZZaćmienie i zVisual Studio (dla C #) jest to coś innego, ale według tych samych zasad.

Możliwość zachowania debuggera w ten sposób jest niezwykle przydatna; tak użyteczne, że odpowiednio strukturyzuję główną pętlę moich programów: w wersji wydania główna pętla jest oczywiście osadzona w try-catch-all; ale w wersji debugowania w głównej pętli nie ma bloku try-catch, więc wszelkie wyjątki, które nie zostaną przechwycone w dowolnym miejscu mojego programu, pozostaną niezauważone, więc debuger zawiesi mój program w momencie, gdy zostaną rzucone.

Jednak podczas testowania moich klas Java za pomocą JUnit mam problem: debuger nie zatrzymuje się na żadnym wyjątku. Zamiast tego, co się dzieje, jest nie tylko oczekiwane, ale także nieoczekiwane wyjątki zostają automatycznie przechwycone, a ja otrzymuję ślad stosu wyjątków po śmierci, aby spróbować z niego skorzystać. To nie jest super.

Kiedyś myślałem, że tak się dzieje, ponieważ JUnit z niego korzystajava.lang.reflect.Method.invoke(), który łapie wszystkie wyjątki i przekształca je naTargetInvocationExceptions, ale potem napisałem własny własny biegacz JUnit, który zna moją klasę testową osobiście i bezpośrednio wywołuje jej metody bezMethod.invoke()i problem nadal występuje. Oznacza to, że problem leży wysoko w rdzeniu JUnit.

Czy ktoś inny ma ten sam problem? Czy ktoś wie o rozwiązaniu, abyśmy mogli zawiesić wykonywanie programu na nieoczekiwanych wyjątkach podczas testowania z JUnit?

Powiązane (bez odpowiedzi) pytanie:Zawieś nieprzechwycone wyjątki czasu wykonywania w testerze Eclipse Junit

Powiązane (bez odpowiedzi) pytanie:Jak włamać się do debugera w przypadku testowym jUnit?

Powiązane (częściowo odpowiedzi) pytanie:Przerwij wyjątek w Eclipse za pomocą jUnit (Przyjęta odpowiedź mówi, że „jeśli debugujesz pojedynczą metodę w jUnit, punkty przerwania zaczynają działać. Jeśli cała klasa lub pakiet jest debugowany w jUnit, debuger nie działa.”)

questionAnswers(2)

yourAnswerToTheQuestion