Interface InvocationInterceptor

All Superinterfaces:
Extension, TestInstantiationAwareExtension

@API(status=STABLE, since="5.10") public interface InvocationInterceptor extends TestInstantiationAwareExtension
InvocationInterceptor defines the API for Extensions that wish to intercept calls to test code.

Invocation Contract

Each method in this class must call InvocationInterceptor.Invocation.proceed() or InvocationInterceptor.Invocation.skip() exactly once on the supplied invocation. Otherwise, the enclosing test or container will be reported as failed.

The default implementation calls proceed() on the supplied invocation.

Constructor Requirements

Consult the documentation in Extension for details on constructor requirements.

ExtensionContext Scope

As of JUnit Jupiter 5.12, this API participates in the TestInstantiationAwareExtension contract. Implementations of this API may therefore choose to override getTestInstantiationExtensionContextScope(ExtensionContext). See interceptTestClassConstructor(Invocation, ReflectiveInvocationContext, ExtensionContext) for details.

Since:
5.5
See Also:
  • Method Details

    • interceptTestClassConstructor

      default <T> T interceptTestClassConstructor(InvocationInterceptor.Invocation<T> invocation, ReflectiveInvocationContext<Constructor<T>> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a test class constructor.

      Note that the test class may not have been initialized (static initialization) when this method is invoked.

      By default, the supplied ExtensionContext represents the test class that's about to be constructed. Extensions may override TestInstantiationAwareExtension.getTestInstantiationExtensionContextScope(ExtensionContext) to return TEST_METHOD in order to change the scope of the ExtensionContext to the test method, unless the PER_CLASS lifecycle is used. Changing the scope makes test-specific data available to the implementation of this method and allows keeping state on the test level by using the provided Store instance.

      Type Parameters:
      T - the result type
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Returns:
      the result of the invocation; never null
      Throws:
      Throwable - in case of failure
    • interceptBeforeAllMethod

      default void interceptBeforeAllMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a @BeforeAll method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptBeforeEachMethod

      default void interceptBeforeEachMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a @BeforeEach method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptTestMethod

      default void interceptTestMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a @Test method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptTestFactoryMethod

      default <T extends @Nullable Object> T interceptTestFactoryMethod(InvocationInterceptor.Invocation<T> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a @TestFactory method, such as a @RepeatedTest or @ParameterizedTest method.
      Type Parameters:
      T - the result type
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Returns:
      the result of the invocation; potentially null
      Throws:
      Throwable - in case of failures
    • interceptTestTemplateMethod

      default void interceptTestTemplateMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a @TestTemplate method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptDynamicTest

      @API(status=STABLE, since="5.11") default void interceptDynamicTest(InvocationInterceptor.Invocation<@Nullable Void> invocation, DynamicTestInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of a DynamicTest.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptAfterEachMethod

      default void interceptAfterEachMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of an @AfterEach method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures
    • interceptAfterAllMethod

      default void interceptAfterAllMethod(InvocationInterceptor.Invocation<@Nullable Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
      Intercept the invocation of an @AfterAll method.
      Parameters:
      invocation - the invocation that is being intercepted; never null
      invocationContext - the context of the invocation that is being intercepted; never null
      extensionContext - the current extension context; never null
      Throws:
      Throwable - in case of failures