package junitparams.internal; import java.lang.reflect.Method; import org.junit.runner.Description; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.Statement; /** * Encapsulates a {@link Throwable} that was caught during initialization so that it can be * thrown during execution in order to preserve previous behavior. */ public class DeferredErrorFrameworkMethod extends InvokableFrameworkMethod { private final Throwable throwable; DeferredErrorFrameworkMethod(Method method, Description description, Throwable throwable) { super(method, description); this.throwable = throwable; } @Override public Statement getInvokeStatement(Object test) { return new Statement() { @Override public void evaluate() throws Throwable { throw throwable; } }; } @Override public void run(MethodBlockSupplier supplier, RunNotifier notifier) { // Do not call the MethodBlockSupplier as that could introduce additional errors, simply // throw the encapsulated Throwable immediately. runMethodInvoker(notifier, getInvokeStatement(notifier), getDescription()); } }