RunnerFactory.java revision e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7
1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.runners; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.base.MockitoException; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.runners.util.RunnerProvider; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.runners.util.TestMethodsFinder; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.InvocationTargetException; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class RunnerFactory { 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final RunnerProvider runnerProvider; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson RunnerFactory(RunnerProvider runnerProvider) { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.runnerProvider = runnerProvider; 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public RunnerFactory() { 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this(new RunnerProvider()); 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public RunnerImpl create(Class<?> klass) throws InvocationTargetException { 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson try { 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (runnerProvider.isJUnit45OrHigherAvailable()) { 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return runnerProvider.newInstance("org.mockito.internal.runners.JUnit45AndHigherRunnerImpl", klass); 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } else { 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return runnerProvider.newInstance("org.mockito.internal.runners.JUnit44RunnerImpl", klass); 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (InvocationTargetException e) { 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (!new TestMethodsFinder().hasTestMethods(klass)) { 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new MockitoException( 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "\n" + 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "\n" + 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "No tests found in " + klass.getSimpleName() + "\n" + 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "Haven't you forgot @Test annotation?\n" 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson , e); 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw e; 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } catch (Throwable t) { 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson throw new MockitoException( 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "\n" + 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "\n" + 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "MockitoRunner can only be used with JUnit 4.4 or higher.\n" + 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "You can upgrade your JUnit version or write your own Runner (please consider contributing your runner to the Mockito community).\n" + 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "Bear in mind that you can still enjoy all features of the framework without using runners (they are completely optional).\n" + 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson "If you get this error despite using JUnit 4.4 or higher then please report this error to the mockito mailing list.\n" 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson , t); 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}