/*
 * 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;

AfterEachCallback defines the API for Extensions that wish to provide additional behavior to tests after an individual test and any user-defined teardown methods (e.g., @AfterEach methods) for that test have been executed.

Concrete implementations often implement BeforeEachCallback as well. If you do not wish to have your callbacks wrapped around user-defined setup and teardown methods, implement BeforeTestExecutionCallback and AfterTestExecutionCallback instead of BeforeEachCallback and AfterEachCallback.

Constructor Requirements

Consult the documentation in Extension for details on constructor requirements.

Wrapping Behavior

JUnit Jupiter guarantees wrapping behavior for multiple registered extensions that implement lifecycle callbacks such as BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, BeforeTestExecutionCallback, and AfterTestExecutionCallback.

That means that, given two extensions Extension1 and Extension2 with Extension1 registered before Extension2, any "before" callbacks implemented by Extension1 are guaranteed to execute before any "before" callbacks implemented by Extension2. Similarly, given the two same two extensions registered in the same order, any "after" callbacks implemented by Extension1 are guaranteed to execute after any "after" callbacks implemented by Extension2. Extension1 is therefore said to wrap Extension2.

See Also:
Since:5.0
/** * {@code AfterEachCallback} defines the API for {@link Extension Extensions} * that wish to provide additional behavior to tests after an individual test * and any user-defined teardown methods (e.g., * {@link org.junit.jupiter.api.AfterEach @AfterEach} methods) for that test * have been executed. * * <p>Concrete implementations often implement {@link BeforeEachCallback} as well. * If you do not wish to have your callbacks <em>wrapped</em> around user-defined * setup and teardown methods, implement {@link BeforeTestExecutionCallback} and * {@link AfterTestExecutionCallback} instead of {@link BeforeEachCallback} and * {@link AfterEachCallback}. * * <h3>Constructor Requirements</h3> * * <p>Consult the documentation in {@link Extension} for details on * constructor requirements. * * <h3>Wrapping Behavior</h3> * * <p>JUnit Jupiter guarantees <em>wrapping behavior</em> for multiple * registered extensions that implement lifecycle callbacks such as * {@link BeforeAllCallback}, {@link AfterAllCallback}, * {@link BeforeEachCallback}, {@link AfterEachCallback}, * {@link BeforeTestExecutionCallback}, and {@link AfterTestExecutionCallback}. * * <p>That means that, given two extensions {@code Extension1} and * {@code Extension2} with {@code Extension1} registered before * {@code Extension2}, any "before" callbacks implemented by {@code Extension1} * are guaranteed to execute before any "before" callbacks implemented by * {@code Extension2}. Similarly, given the two same two extensions registered * in the same order, any "after" callbacks implemented by {@code Extension1} * are guaranteed to execute after any "after" callbacks implemented by * {@code Extension2}. {@code Extension1} is therefore said to <em>wrap</em> * {@code Extension2}. * * @since 5.0 * @see org.junit.jupiter.api.AfterEach * @see BeforeEachCallback * @see BeforeTestExecutionCallback * @see AfterTestExecutionCallback * @see BeforeAllCallback * @see AfterAllCallback */
@FunctionalInterface @API(status = STABLE, since = "5.0") public interface AfterEachCallback extends Extension {
Callback that is invoked after an individual test and any user-defined teardown methods for that test have been executed.
Params:
  • context – the current extension context; never null
/** * Callback that is invoked <em>after</em> an individual test and any * user-defined teardown methods for that test have been executed. * * @param context the current extension context; never {@code null} */
void afterEach(ExtensionContext context) throws Exception; }