package org.test4j.junit.statement;
import java.lang.reflect.Method;
import org.junit.runners.model.Statement;
import org.test4j.module.core.TestListener;
/**
* 在所有的@Before方法之后,测试方法之前执行TestListener的beforeMethodRunning方法<br>
* 在所有的@After方法之前,测试方法之后执行TestListener的afterMethodRunned方法
*
* @author darui.wudr
*/
public class MethodAroundStatement extends Statement {
private final Statement invoker;
private final TestListener testListener;
private final Object test;
private final Method method;
public MethodAroundStatement(Statement invoker, TestListener testListener, Object test, Method method) {
this.invoker = invoker;
this.testListener = testListener;
this.test = test;
this.method = method;
}
@Override
public void evaluate() throws Throwable {
Throwable methodE = null;
try {
testListener.beforeRunning(this.test, this.method);
invoker.evaluate();
} catch (Throwable e) {
methodE = e;
throw e;
} finally {
testListener.afterRunned(this.test, this.method, methodE);
}
}
}