2010-05-04 3 views
6

Все мои тесты для моего Groovy кода выглядеть следующим образомОбертывание JUnit тесты (в Eclipse)

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

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

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

ответ

7

Да, используйте Правило. В основном вы должны иметь класс, который реализует интерфейс 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, поэтому вам может потребоваться обновить его.

+0

Спасибо @Yishai. Я вернусь сюда, когда вернусь к реальному коду. –

+0

Просто сделайте несколько заметок :) 'println (junit.runner.Version.id());' –

+0

Хммм ... синтаксис кажется всем хорошим, но метод 'apply' никогда не запускается. Все еще выдумывая эту штуку ... –