/*
* 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;
/**
* <p>
* <code>TestExecutionListener</code> defines a <em>listener</em> API for
* reacting to test execution events published by the {@link TestContextManager}
* with which the listener is registered.
* </p>
* <p>
* Concrete implementations must provide a <code>public</code> no-args
* constructor, so that listeners can be instantiated transparently by tools and
* configuration mechanisms.
* </p>
* <p>
* Spring provides the following out-of-the-box implementations:
* </p>
* <ul>
* <li>{@link org.springframework.test.context.support.DependencyInjectionTestExecutionListener DependencyInjectionTestExecutionListener}</li>
* <li>{@link org.springframework.test.context.support.DirtiesContextTestExecutionListener DirtiesContextTestExecutionListener}</li>
* <li>{@link org.springframework.test.context.transaction.TransactionalTestExecutionListener TransactionalTestExecutionListener}</li>
* </ul>
*
* @author Sam Brannen
* @author Juergen Hoeller
* @since 2.5
*/
public interface TestExecutionListener {
/**
* Prepares the {@link Object test instance} of the supplied
* {@link TestContext test context}, for example for injecting
* dependencies.
* <p>This method should be called immediately after instantiation but prior to
* any framework-specific lifecycle callbacks.
* @param testContext the test context for the test (never <code>null</code>)
* @throws Exception allows any exception to propagate
*/
void prepareTestInstance(TestContext testContext) throws Exception;
/**
* Pre-processes a test just <em>before</em> execution of the
* {@link java.lang.reflect.Method test method} in the supplied
* {@link TestContext test context}, for example for setting up test
* fixtures.
* @param testContext the test context in which the test method will be
* executed (never <code>null</code>)
* @throws Exception allows any exception to propagate
*/
void beforeTestMethod(TestContext testContext) throws Exception;
/**
* Post-processes a test just <em>after</em> execution of the
* {@link java.lang.reflect.Method test method} in the supplied
* {@link TestContext test context}, for example for tearing down test
* fixtures.
* @param testContext the test context in which the test method was
* executed (never <code>null</code>)
* @throws Exception allows any exception to propagate
*/
void afterTestMethod(TestContext testContext) throws Exception;
}