| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito.runners;
|
|
|
| import java.lang.reflect.InvocationTargetException;
|
|
|
| import org.junit.runner.Description;
|
| import org.junit.runner.Runner;
|
| import org.junit.runner.manipulation.Filter;
|
| import org.junit.runner.manipulation.Filterable;
|
| import org.junit.runner.manipulation.NoTestsRemainException;
|
| import org.junit.runner.notification.Failure;
|
| import org.junit.runner.notification.RunListener;
|
| import org.junit.runner.notification.RunNotifier;
|
| import org.mockito.internal.debugging.WarningsCollector;
|
| import org.mockito.internal.runners.RunnerFactory;
|
| import org.mockito.internal.runners.RunnerImpl;
|
| import org.mockito.internal.util.junit.JUnitFailureHacker;
|
|
|
| /**
|
| * Experimental implementation that suppose to improve tdd/testing experience.
|
| * Don't hesitate to send feedback to mockito@googlegroups.com
|
| * <b>It is very likely it will change in the next version!</b>
|
| * <p>
|
| * This runner does exactly what {@link MockitoJUnitRunner} does but also
|
| * adds extra Mocktio hints to the exception message.
|
| * The point is that Mockito should help the tdd developer to quickly figure out if the test fails for the right reason and track the reason.
|
| * <p>
|
| * The implemntation is pretty hacky - it uses brute force of reflection to modify the exception message and add extra mockito hints.
|
| * You've been warned.
|
| * <p>
|
| * Do you think it is useful or not? Drop us an email at mockito@googlegroups.com
|
| * <p>
|
| * Experimental implementation - will change in future!
|
| */
|
| public class VerboseMockitoJUnitRunner extends Runner implements Filterable {
|
|
|
| private RunnerImpl runner;
|
|
|
| public VerboseMockitoJUnitRunner(Class<?> klass) throws InvocationTargetException {
|
| this(new RunnerFactory().create(klass));
|
| }
|
|
|
| VerboseMockitoJUnitRunner(RunnerImpl runnerImpl) {
|
| this.runner = runnerImpl;
|
| }
|
|
|
| @Override
|
| public void run(RunNotifier notifier) {
|
|
|
| //a listener that changes the failure's exception in a very hacky way...
|
| RunListener listener = new RunListener() {
|
|
|
| WarningsCollector warningsCollector;
|
|
|
| @Override
|
| public void testStarted(Description description) throws Exception {
|
| warningsCollector = new WarningsCollector();
|
| }
|
|
|
| @Override
|
| public void testFailure(final Failure failure) throws Exception {
|
| String warnings = warningsCollector.getWarnings();
|
| new JUnitFailureHacker().appendWarnings(failure, warnings);
|
| }
|
| };
|
|
|
| notifier.addFirstListener(listener);
|
|
|
| runner.run(notifier);
|
| }
|
|
|
| @Override
|
| public Description getDescription() {
|
| return runner.getDescription();
|
| }
|
|
|
| public void filter(Filter filter) throws NoTestsRemainException {
|
| //filter is required because without it UnrootedTests show up in Eclipse
|
| runner.filter(filter);
|
| }
|
| } |