package org.test4j.junit.statement;
import java.lang.reflect.Method;
import org.junit.runners.model.Statement;
import org.test4j.module.core.TestListener;
/**
* 在所有的@Before方法之前执行TestListener的setupMethod方法<br>
* 在所有的@After方法之后执行TestListener的teardownMethod方法
*
* @author darui.wudr
*/
public class TestAroundStatement extends Statement {
private final TestListener listener;
private final Statement invoker;
private final Object test;
private final Method method;
public TestAroundStatement(Statement parent, TestListener listener, Object test, Method method) {
this.listener = listener;
this.invoker = parent;
this.test = test;
this.method = method;
}
@Override
public void evaluate() throws Throwable {
try {
this.listener.beforeMethod(this.test, this.method);
this.invoker.evaluate();
} finally {
this.listener.afterMethod(this.test, this.method);
}
}
}