JUnit测试的包装(在Eclipse中)

6
所有我的 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

是的,使用规则。基本上,您必须有一个实现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中引入的,因此您可能需要更新版本才能使用它。


谢谢@Yishai。当我开始写真正的代码时,我会回来查看这里。 - Dan Rosenstark
只是做一些笔记 :) println(junit.runner.Version.id()); - Dan Rosenstark
嗯...语法似乎都没问题,但是apply方法从未被执行。还在摸索这个问题... - Dan Rosenstark
@yar,请确保你的类不要继承TestCase,否则JUnit运行器将会将其作为一个3.8测试来运行。 - Yishai
感谢您的所有帮助。事实证明,我必须真正学习一些东西才能使JUnit 4工作,但是您的代码完美无缺。再次感谢。 - Dan Rosenstark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接