package org.gradle; import java.lang.reflect.Method; import org.junit.runner.notification.RunNotifier; import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.InitializationError; import org.junit.runners.model.Statement; public class CustomRunner extends BlockJUnit4ClassRunner { public static boolean isClassUnderTestLoaded; private final Class<?> bootstrappedTestClass; public CustomRunner(Class<?> clazz) throws Exception { super(clazz); bootstrappedTestClass = clazz; } @Override protected Statement methodBlock(final FrameworkMethod method) { return new Statement() { @Override public void evaluate() throws Throwable { if(isClassUnderTestLoaded){ throw new RuntimeException("Test Class should not be loaded"); } final HelperTestRunner helperTestRunner = new HelperTestRunner(bootstrappedTestClass); final Method bootstrappedMethod = bootstrappedTestClass.getMethod(method.getName()); final Statement statement = helperTestRunner.methodBlock(new FrameworkMethod(bootstrappedMethod)); statement.evaluate(); } }; } public class HelperTestRunner extends BlockJUnit4ClassRunner { public HelperTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected Object createTest() throws Exception { return super.createTest(); } @Override public Statement classBlock(RunNotifier notifier) { return super.classBlock(notifier); } @Override public Statement methodBlock(FrameworkMethod method) { return super.methodBlock(method); } } }