package org.test4j.junit.demo.features; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class LoggingRule implements TestRule { public class LoggingStatement extends Statement { private final Statement statement; public LoggingStatement(Statement aStatement, String aName) { statement = aStatement; } @Override public void evaluate() throws Throwable { System.out.println("before: " + name); statement.evaluate(); System.out.println("after: " + name); } } private final String name; public LoggingRule(String aName) { name = aName; } public Statement apply(Statement statement, Description description) { System.out.println("apply: " + name); return new LoggingStatement(statement, name); } }