/*
 * Copyright 2015-2020 the original author or authors.
 *
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License v2.0 which
 * accompanies this distribution and is available at
 *
 * https://www.eclipse.org/legal/epl-v20.html
 */

package org.junit.jupiter.api.extension;

import static org.apiguardian.api.API.Status.STABLE;

import org.apiguardian.api.API;

TestInstancePostProcessor defines the API for Extensions that wish to post-process test instances.

Common use cases include injecting dependencies into the test instance, invoking custom initialization methods on the test instance, etc.

Extensions that implement TestInstancePostProcessor must be registered at the class level.

Constructor Requirements

Consult the documentation in Extension for details on constructor requirements.

See Also:
Since:5.0
/** * {@code TestInstancePostProcessor} defines the API for {@link Extension * Extensions} that wish to <em>post-process</em> test instances. * * <p>Common use cases include injecting dependencies into the test * instance, invoking custom initialization methods on the test instance, * etc. * * <p>Extensions that implement {@code TestInstancePostProcessor} must be * registered at the class level. * * <h3>Constructor Requirements</h3> * * <p>Consult the documentation in {@link Extension} for details on * constructor requirements. * * @since 5.0 * @see #postProcessTestInstance(Object, ExtensionContext) * @see TestInstancePreDestroyCallback * @see TestInstanceFactory * @see ParameterResolver */
@FunctionalInterface @API(status = STABLE, since = "5.0") public interface TestInstancePostProcessor extends Extension {
Callback for post-processing the supplied test instance.

Note: the ExtensionContext supplied to a TestInstancePostProcessor will always return an empty Optional value from getTestInstance(). A TestInstancePostProcessor should therefore only attempt to process the supplied testInstance.

Params:
  • testInstance – the instance to post-process; never null
  • context – the current extension context; never null
/** * Callback for post-processing the supplied test instance. * * <p><strong>Note</strong>: the {@code ExtensionContext} supplied to a * {@code TestInstancePostProcessor} will always return an empty * {@link java.util.Optional} value from {@link ExtensionContext#getTestInstance() * getTestInstance()}. A {@code TestInstancePostProcessor} should therefore * only attempt to process the supplied {@code testInstance}. * * @param testInstance the instance to post-process; never {@code null} * @param context the current extension context; never {@code null} */
void postProcessTestInstance(Object testInstance, ExtensionContext context) throws Exception; }