包装JUnit测试(在Eclipse中)

时间:2010-05-04 22:38:33

标签: java groovy junit

我对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 个答案:

答案 0 :(得分:7)

是的,使用规则。基本上你必须有一个实现MethodRule接口的类,它通过替换它自己的包含try / catch的Statement实现来处理apply方法中的异常处理。

要使用规则,您可以在测试类中定义一个字段,如下所示:

  @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中引入的,因此您可能需要更新才能使用它。