Как я могу изменить способ обработки исключений в моем проекте Java лучше? - PullRequest
2 голосов
/ 15 марта 2012

Мне нужно провести рефакторинг Java-программы, созданной с помощью Eclipse RCP.Мой предшественник передал реализацию ViewPart через несколько вызовов классу, для которого я хочу написать модульные тесты.ViewPart передается для обработки исключений.Каждый раз, когда возникает ошибка, сообщение об ошибке будет записано в StatusLineManager ViewPart.

Теперь я хочу изменить этот процесс обработки исключений , потому что он вызывает у меня много проблем.когда я хочу сделать свои юнит-тесты.

Есть ли способ передать эти исключения в ViewPart, не передавая его через несколько вызовов методов?

Мои первоначальные идеи по созданию какого-то ExceptionMessenger класса, который будетинициализироваться каждый раз, когда возникает исключение.Но тогда я не нашел способа доступа к ViewPart.

edit пример кода:

class A {
    void func() {
         B.funcB(arg, arg1, arg2, ViewPart view):
    }
}

class B {
      void funcB(arg, arg1, arg2, ViewPart view) {
           C.funcC(arg, arg1, ViewPart view);
      }
}

class C {
    void funcC(arg, arg1, ViewPart view) {
        try{
             doSomeThing():
        catch(Exception e) {
            doSomeErrorMessages(e, view);
        }
     }

    void doSomeErrorMessages(e, ViewPart view) {
        SomeOtherClass.writeToStatusLine( StatusCategory.Processing, e.getMessage(), view); 
    }
 }

class SomeOtherClass {
    void writeToStatusLine(final StatusCategory category, final String message, final ViewPart view) {
    IActionBars bars = view.getViewSite().getActionBars();
        IStatusLineManager statusLineManagerRef = bars.getStatusLineManager();
        statusLineManagerRef.setErrorMessage(null); // clear any error msg

        doWhatEver();
    }
 }

1 Ответ

5 голосов
/ 15 марта 2012

Если я правильно понял вашу задачу, есть две части, где вы имеете дело с исключениями:

  • Java обработка исключений , когда возникает какое-то исключительное поведение.Для этого вам следует придерживаться того, что Java предлагает вам, как описано, например, в Эффективная Java Джоша Блоха , пункт 57 (Используйте исключения только для исключительных условий).
  • Визуализация исключений в вашем инструменте (ViewPart).Так как это не является частью обработки исключений для восстановления или иным образом справляется с исключительными условиями, я бы намеренно не использовал для этого обработку исключений Java, т.е. избегал бы неправильного использования обработки исключений для потока управления.Следовательно, я думаю, что дизайн вашего предшественника для передачи ViewPart для передачи исключений в качестве параметров вашему ViewPart хорош.

В качестве альтернативы можно было бы разрешить выбросу исключений вверх и затем на некоторой разумной границе слоя / каркаса выполнить визуализацию.Но

  • будьте осторожны, чтобы не смешивать две части работы с исключениями, перечисленными выше
  • , если вы имеете дело с проверенными исключениями и можете обрабатывать их далеко вниз в иерархии вызовов, это будетсделать ваш код намного страшнее, чем передать ViewPart (и определенно смешать две части, перечисленные выше).

Какие у вас проблемы при модульном тестировании ?

  • Если ViewPart создает проблемы: макетируйте его .
  • Если передача ViewPart в качестве параметра вас раздражает: используйте некоторую инфраструктуру для внедрения зависимостей, например, Spring или Guice .
  • Если альтернативная визуализация / обработка исключений создает проблемы: может ли (junit-) rule решить проблему?
...