|
Spring Framework example source code file (SpringJUnit4ClassRunner.java)
The Spring Framework SpringJUnit4ClassRunner.java source code
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.context.junit4;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.internal.runners.InitializationError;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.Description;
import org.junit.runner.notification.RunNotifier;
import org.springframework.test.context.TestContextManager;
/**
* <p>
* SpringJUnit4ClassRunner is a custom extension of {@link JUnit4ClassRunner}
* which provides functionality of the <em>Spring TestContext Framework
* to standard JUnit 4.4+ tests by means of the {@link TestContextManager} and
* associated support classes and annotations.
* </p>
* <p>
* The following list constitutes all annotations currently supported directly
* by SpringJUnit4ClassRunner.
* <em>(Note that additional annotations may be supported by various
* {@link org.springframework.test.context.TestExecutionListener TestExecutionListeners})</em>
* </p>
* <ul>
* <li>{@link org.junit.Test#expected() @Test(expected=...)}
* <li>{@link org.springframework.test.annotation.ExpectedException @ExpectedException}
* <li>{@link org.junit.Test#timeout() @Test(timeout=...)}
* <li>{@link org.springframework.test.annotation.Timed @Timed}
* <li>{@link org.springframework.test.annotation.Repeat @Repeat}
* <li>{@link org.junit.Ignore @Ignore}
* <li>{@link org.springframework.test.annotation.ProfileValueSourceConfiguration @ProfileValueSourceConfiguration}
* <li>{@link org.springframework.test.annotation.IfProfileValue @IfProfileValue}
* </ul>
*
* @author Sam Brannen
* @author Juergen Hoeller
* @since 2.5
* @see TestContextManager
*/
public class SpringJUnit4ClassRunner extends JUnit4ClassRunner {
private static final Log logger = LogFactory.getLog(SpringJUnit4ClassRunner.class);
private final TestContextManager testContextManager;
/**
* Constructs a new <code>SpringJUnit4ClassRunner and initializes a
* {@link TestContextManager} to provide Spring testing functionality to
* standard JUnit tests.
* @param clazz the Class object corresponding to the test class to be run
* @see #createTestContextManager(Class)
*/
public SpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
super(clazz);
if (logger.isDebugEnabled()) {
logger.debug("SpringJUnit4ClassRunner constructor called with [" + clazz + "].");
}
this.testContextManager = createTestContextManager(clazz);
}
/**
* Delegates to {@link JUnit4ClassRunner#createTest()} to create the test
* instance and then to a {@link TestContextManager} to
* {@link TestContextManager#prepareTestInstance(Object) prepare} the test
* instance for Spring testing functionality.
* @see JUnit4ClassRunner#createTest()
* @see TestContextManager#prepareTestInstance(Object)
*/
@Override
protected Object createTest() throws Exception {
Object testInstance = super.createTest();
getTestContextManager().prepareTestInstance(testInstance);
return testInstance;
}
/**
* Creates a new {@link TestContextManager}. Can be overridden by subclasses.
* @param clazz the Class object corresponding to the test class to be managed
*/
protected TestContextManager createTestContextManager(Class<?> clazz) {
return new TestContextManager(clazz);
}
/**
* Get the {@link TestContextManager} associated with this runner.
*/
protected final TestContextManager getTestContextManager() {
return this.testContextManager;
}
/**
* Invokes the supplied {@link Method test method} and notifies the supplied
* {@link RunNotifier} of the appropriate events.
* @see #createTest()
* @see JUnit4ClassRunner#invokeTestMethod(Method,RunNotifier)
*/
@Override
protected void invokeTestMethod(Method method, RunNotifier notifier) {
if (logger.isDebugEnabled()) {
logger.debug("Invoking test method [" + method.toGenericString() + "]");
}
// The following is a 1-to-1 copy of the original JUnit 4.4 code, except
// that we use custom implementations for TestMethod and MethodRoadie.
Description description = methodDescription(method);
Object testInstance;
try {
testInstance = createTest();
}
catch (InvocationTargetException ex) {
notifier.testAborted(description, ex.getCause());
return;
}
catch (Exception ex) {
notifier.testAborted(description, ex);
return;
}
SpringTestMethod testMethod = new SpringTestMethod(method, getTestClass());
new SpringMethodRoadie(getTestContextManager(), testInstance, testMethod, notifier, description).run();
}
}
Other Spring Framework examples (source code examples)Here is a short list of links related to this Spring Framework SpringJUnit4ClassRunner.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.