Обтекание тестов JUnit (в Eclipse) - PullRequest
6 голосов
/ 05 мая 2010

Все мои тесты для моего Groovy-кода выглядят так

public void testButtons() {
    try {
         page.getButtons();
    } catch (Exception e) {
         throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);     
    }
}

потому что мне нужно очистить любой возможный StackTrace, который появляется (в противном случае его очень трудно прочитать, так как он содержит весь метакод Groovy). Есть ли способ указать, что все тесты JUnit обернуты определенным образом (например, обработчик ошибок)?

Примечание: Я запускаю их в Eclipse, но если есть способ сделать это в IntelliJ или Netbeans, это было бы полезно знать.

1 Ответ

7 голосов
/ 05 мая 2010

Да, используйте правило. По сути, у вас должен быть класс, который реализует интерфейс MethodRule, который обрабатывает обработку исключений в методе apply, заменяя собственную реализацию Statement, в которой есть try / catch.

Чтобы использовать правило, вы определяете поле в тестовом классе следующим образом:

  @Rule public MethodRule exceptionCleanser = new ExceptionCleanser();

Первая реализация, вероятно, будет выглядеть примерно так:

  public class ExceptionCleanser implements MethodRule {

      public Statement apply(final Statement base, FrameworkMethod method, Object target) {
          return new Statement() {
               public void evaluate() throws Throwable {
                 try {
                    base.evaluate();
                 } catch (Exception e) {
                       throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);     
                 }
               }
          };
      }
  }

Вышесказанное полностью не проверено, но вы должны быть в состоянии понять идею. Аннотация @Rule была введена в JUnit 4.7, поэтому вам может потребоваться обновить ее, чтобы использовать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...