| /* |
| * Copyright (c) 2016 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.mockito.Mockito; |
| import org.mockito.internal.junit.UnnecessaryStubbingsReporter; |
| import org.mockito.internal.runners.util.FailureDetector; |
| |
| public class StrictRunner implements InternalRunner { |
| |
| private final Class<?> testClass; |
| private final InternalRunner runner; |
| private boolean filterRequested; |
| |
| /** |
| * @param runner - the runner to wrap around |
| * @param testClass - for reporting purposes |
| */ |
| public StrictRunner(InternalRunner runner, Class<?> testClass) { |
| this.runner = runner; |
| this.testClass = testClass; |
| } |
| |
| public void run(RunNotifier notifier) { |
| //TODO need to be able to opt in for full stack trace instead of just relying on the stack trace filter |
| UnnecessaryStubbingsReporter reporter = new UnnecessaryStubbingsReporter(); |
| FailureDetector listener = new FailureDetector(); |
| |
| Mockito.framework().addListener(reporter); |
| try { |
| // add listener that detects test failures |
| notifier.addListener(listener); |
| runner.run(notifier); |
| } finally { |
| Mockito.framework().removeListener(reporter); |
| } |
| |
| if (!filterRequested && listener.isSuccessful()) { |
| //only report when: |
| //1. if all tests from given test have ran (filter requested is false) |
| // Otherwise we would report unnecessary stubs even if the user runs just single test from the class |
| //2. tests are successful (we don't want to add an extra failure on top of any existing failure, to avoid confusion) |
| reporter.validateUnusedStubs(testClass, notifier); |
| } |
| } |
| |
| public Description getDescription() { |
| return runner.getDescription(); |
| } |
| |
| public void filter(Filter filter) throws NoTestsRemainException { |
| filterRequested = true; |
| runner.filter(filter); |
| } |
| } |