package junitparams.internal; import java.lang.reflect.Method; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runner.Runner; import org.junit.runner.notification.RunListener; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; /** * A {@link FrameworkMethod} that represents an instance of an * {@link ParameterisedFrameworkMethod}, that is the combination of the test method with the * parameter set that it will be passed. */ public class InstanceFrameworkMethod extends InvokableFrameworkMethod { private final Description instanceDescription; private final Object parametersSet; /** * Create an {@link InstanceFrameworkMethod}. * *

It has two {@link Description} instances because it has to provide different * {@link Description} to {@link TestRule} instances than other usages in order to maintain * backwards compatibility. * * @param method the test method * @param description the description that is supplied to {@link TestRule} instances. * @param instanceDescription the description used for all other purposes, e.g. filtering, * {@link Runner#getDescription()} and {@link RunListener}. * @param parametersSet the set of parameters to pass to the method. */ InstanceFrameworkMethod(Method method, Description description, Description instanceDescription, Object parametersSet) { super(method, description); this.instanceDescription = instanceDescription; this.parametersSet = parametersSet; } @Override public Statement getInvokeStatement(Object test) { return new InvokeParameterisedMethod(this, test, parametersSet); } Description getInstanceDescription() { return instanceDescription; } @Override public void run(MethodBlockSupplier supplier, RunNotifier notifier) { runMethodInvoker(notifier, supplier.getMethodBlock(this), getInstanceDescription()); } }