/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.runners; import org.junit.runner.Description; import org.junit.runner.manipulation.Filter; import org.junit.runner.manipulation.NoTestsRemainException; 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; import org.mockito.MockitoAnnotations; import org.mockito.internal.runners.util.FrameworkUsageValidator; public class JUnit45AndHigherRunnerImpl implements RunnerImpl { private BlockJUnit4ClassRunner runner; public JUnit45AndHigherRunnerImpl(Class klass) throws InitializationError { runner = new BlockJUnit4ClassRunner(klass) { protected Statement withBefores(FrameworkMethod method, Object target, Statement statement) { // init annotated mocks before tests MockitoAnnotations.initMocks(target); return super.withBefores(method, target, statement); } }; } public void run(final RunNotifier notifier) { // add listener that validates framework usage at the end of each test notifier.addListener(new FrameworkUsageValidator(notifier)); runner.run(notifier); } public Description getDescription() { return runner.getDescription(); } public void filter(Filter filter) throws NoTestsRemainException { runner.filter(filter); } }