From 2f894132b0c1b85f90bc922c58d5cbcb8205143b Mon Sep 17 00:00:00 2001 From: Mateusz Pietryga Date: Mon, 27 May 2019 14:37:52 +0200 Subject: [PATCH 1/4] Introduce extension APIs to handle exceptions from lifecycle methods Implement LifecycleMethodExecutionExceptionHandler allowing extensions to intercept the exceptions thrown during execution of methods annotated with `@BeforeAll`, `@BeforeEach`, `@AfterEach` and `@AfterAll` before they propagate. Issue #1454 --- ...ecycleMethodExecutionExceptionHandler.java | 136 ++++++++++++++++++ .../TestExecutionExceptionHandler.java | 2 + .../descriptor/ClassTestDescriptor.java | 42 +++++- .../descriptor/JupiterTestDescriptor.java | 28 ++++ .../descriptor/TestMethodTestDescriptor.java | 66 +++++---- 5 files changed, 242 insertions(+), 32 deletions(-) create mode 100644 junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.java diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.java new file mode 100644 index 000000000000..b428eebfcfda --- /dev/null +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.java @@ -0,0 +1,136 @@ +/* + * Copyright 2015-2019 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; + +/** + * {@code LifecycleMethodExecutionExceptionHandler} defines the API for + * {@link Extension Extensions} that wish to handle exceptions thrown during + * execution of lifecycle methods (annotated with {@code @BeforeAll}, + * {@code @BeforeEach}, {@code @AfterEach} and {@code @AfterAll}. + * + *

Common use cases include swallowing an exception if it's anticipated, + * logging or rolling back a transaction in certain error scenarios. + * + *

This extension needs to be declared on a class level if class level methods + * ({@code @BeforeAll}, {@code @AfterAll}) are to be covered. If declared on Test + * level, only handlers for {@code @BeforeEach} and {@code @AfterEach} will execute + * + *

Constructor Requirements

+ * + *

Consult the documentation in {@link Extension} for details on constructor + * requirements. + * + * @see TestExecutionExceptionHandler + * + * @since 5.5 + */ +@API(status = STABLE, since = "5.5") +public interface LifecycleMethodExecutionExceptionHandler extends Extension { + + /** + * Handle the supplied {@link Throwable throwable}. + * + *

Implementors must perform one of the following. + *

    + *
  1. Rethrow the supplied {@code throwable} as is which is the default implementation
  2. + *
  3. Swallow the supplied {@code throwable}, thereby preventing propagation.
  4. + *
  5. Throw a new exception, potentially wrapping the supplied {@code throwable}.
  6. + *
+ * + *

If the supplied {@code throwable} is swallowed, subsequent + * {@code LifecycleMethodExecutionExceptionHandler} will not be invoked; + * otherwise, the next registered {@code LifecycleMethodExecutionExceptionHandler} + * (if there is one) will be invoked with any {@link Throwable} thrown by + * this handler. + * + * @param context the current extension context; never {@code null} + * @param throwable the {@code Throwable} to handle; never {@code null} + */ + default void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + throw throwable; + } + + /** + * Handle the supplied {@link Throwable throwable}. + * + *

Implementors must perform one of the following. + *

    + *
  1. Rethrow the supplied {@code throwable} as is which is the default implementation
  2. + *
  3. Swallow the supplied {@code throwable}, thereby preventing propagation.
  4. + *
  5. Throw a new exception, potentially wrapping the supplied {@code throwable}.
  6. + *
+ * + *

If the supplied {@code throwable} is swallowed, subsequent + * {@code LifecycleMethodExecutionExceptionHandler} + * will not be invoked; otherwise, the next registered + * {@code LifecycleMethodExecutionExceptionHandler} (if there is one) + * will be invoked with any {@link Throwable} thrown by this handler. + * + * @param context the current extension context; never {@code null} + * @param throwable the {@code Throwable} to handle; never {@code null} + */ + default void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + throw throwable; + } + + /** + * Handle the supplied {@link Throwable throwable}. + * + *

Implementors must perform one of the following. + *

    + *
  1. Rethrow the supplied {@code throwable} as is which is the default implementation
  2. + *
  3. Swallow the supplied {@code throwable}, thereby preventing propagation.
  4. + *
  5. Throw a new exception, potentially wrapping the supplied {@code throwable}.
  6. + *
+ * + *

If the supplied {@code throwable} is swallowed, subsequent + * {@code LifecycleMethodExecutionExceptionHandler} will not be invoked; + * otherwise, the next registered {@code LifecycleMethodExecutionExceptionHandler} + * (if there is one) will be invoked with any {@link Throwable} thrown by + * this handler. + * + * @param context the current extension context; never {@code null} + * @param throwable the {@code Throwable} to handle; never {@code null} + */ + default void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + throw throwable; + } + + /** + * Handle the supplied {@link Throwable throwable}. + * + *

Implementors must perform one of the following. + *

    + *
  1. Rethrow the supplied {@code throwable} as is which is the default implementation
  2. + *
  3. Swallow the supplied {@code throwable}, thereby preventing propagation.
  4. + *
  5. Throw a new exception, potentially wrapping the supplied {@code throwable}.
  6. + *
+ * + *

If the supplied {@code throwable} is swallowed, subsequent + * {@code LifecycleMethodExecutionExceptionHandler} will not be invoked; otherwise, + * the next registered {@code LifecycleMethodExecutionExceptionHandler} (if there + * is one) will be invoked with any {@link Throwable} thrown by this handler. + * + * @param context the current extension context; never {@code null} + * @param throwable the {@code Throwable} to handle; never {@code null} + */ + default void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + throw throwable; + } +} diff --git a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.java b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.java index 852261871e84..dcf88b004445 100644 --- a/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.java +++ b/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.java @@ -30,6 +30,8 @@ *

Consult the documentation in {@link Extension} for details on * constructor requirements. * + * @see LifecycleMethodExecutionExceptionHandler + * * @since 5.0 */ @FunctionalInterface diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassTestDescriptor.java index bd1f7c320523..97a40e2f689e 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassTestDescriptor.java @@ -41,6 +41,7 @@ import org.junit.jupiter.api.extension.ExtensionConfigurationException; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.InvocationInterceptor; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; import org.junit.jupiter.api.extension.TestInstanceFactory; import org.junit.jupiter.api.extension.TestInstancePostProcessor; import org.junit.jupiter.api.extension.TestInstances; @@ -386,23 +387,54 @@ private void invokeBeforeAllMethods(JupiterEngineExecutionContext context) { Object testInstance = extensionContext.getTestInstance().orElse(null); for (Method method : this.beforeAllMethods) { - throwableCollector.execute(() -> executableInvoker.invoke(method, testInstance, extensionContext, registry, - ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptBeforeAllMethod))); + throwableCollector.execute(() -> { + try { + executableInvoker.invoke(method, testInstance, extensionContext, registry, + ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptBeforeAllMethod)); + } + catch (Throwable throwable) { + invokeBeforeAllExecutionExceptionHandlers(registry, extensionContext, throwable); + } + }); if (throwableCollector.isNotEmpty()) { break; } } } + private void invokeBeforeAllExecutionExceptionHandlers(ExtensionRegistry registry, ExtensionContext context, + Throwable throwable) { + + invokeExecutionExceptionHandlers(throwable, + registry.getReversedExtensions(LifecycleMethodExecutionExceptionHandler.class), + (ex, handler) -> () -> ((LifecycleMethodExecutionExceptionHandler) handler).handleBeforeAllMethodExecutionException( + context, ex)); + } + private void invokeAfterAllMethods(JupiterEngineExecutionContext context) { ExtensionRegistry registry = context.getExtensionRegistry(); ExtensionContext extensionContext = context.getExtensionContext(); ThrowableCollector throwableCollector = context.getThrowableCollector(); Object testInstance = extensionContext.getTestInstance().orElse(null); - this.afterAllMethods.forEach( - method -> throwableCollector.execute(() -> executableInvoker.invoke(method, testInstance, extensionContext, - registry, ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptAfterAllMethod)))); + this.afterAllMethods.forEach(method -> throwableCollector.execute(() -> { + try { + executableInvoker.invoke(method, testInstance, extensionContext, registry, + ReflectiveInterceptorCall.ofVoidMethod(InvocationInterceptor::interceptAfterAllMethod)); + } + catch (Throwable throwable) { + invokeAfterAllExecutionExceptionHandlers(registry, extensionContext, throwable); + } + })); + } + + private void invokeAfterAllExecutionExceptionHandlers(ExtensionRegistry registry, ExtensionContext context, + Throwable throwable) { + + invokeExecutionExceptionHandlers(throwable, + registry.getReversedExtensions(LifecycleMethodExecutionExceptionHandler.class), + (ex, handler) -> () -> ((LifecycleMethodExecutionExceptionHandler) handler).handleAfterAllMethodExecutionException( + context, ex)); } private void invokeAfterAllCallbacks(JupiterEngineExecutionContext context) { diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterTestDescriptor.java index dc04b05f75df..e371b6959b99 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterTestDescriptor.java @@ -21,13 +21,16 @@ import java.lang.reflect.AnnotatedElement; import java.util.Collections; import java.util.LinkedHashSet; +import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.function.BiFunction; import java.util.function.Supplier; import org.apiguardian.api.API; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ResourceAccessMode; import org.junit.jupiter.api.parallel.ResourceLock; @@ -37,6 +40,8 @@ import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.logging.Logger; import org.junit.platform.commons.logging.LoggerFactory; +import org.junit.platform.commons.util.BlacklistedExceptions; +import org.junit.platform.commons.util.ExceptionUtils; import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestSource; import org.junit.platform.engine.TestTag; @@ -45,6 +50,7 @@ import org.junit.platform.engine.support.hierarchical.ExclusiveResource; import org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode; import org.junit.platform.engine.support.hierarchical.Node; +import org.junit.platform.engine.support.hierarchical.ThrowableCollector; /** * @since 5.0 @@ -95,6 +101,28 @@ protected static Set getTags(AnnotatedElement element) { // @formatter:on } + /** + * Invokes handlers on the {@code Throwable} one by one until none are left or the throwable to handle + * has been swallowed. + */ + void invokeExecutionExceptionHandlers(Throwable throwable, List handlers, + BiFunction generator) { + // No handlers left? + if (handlers.isEmpty()) { + ExceptionUtils.throwAsUncheckedException(throwable); + } + + try { + // Invoke next available handler + ThrowableCollector.Executable executable = generator.apply(throwable, handlers.remove(0)); + executable.execute(); + } + catch (Throwable handledThrowable) { + BlacklistedExceptions.rethrowIfBlacklisted(handledThrowable); + invokeExecutionExceptionHandlers(handledThrowable, handlers, generator); + } + } + // --- Node ---------------------------------------------------------------- @Override diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java index 19526d7a4e28..a36cb0579033 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java @@ -28,6 +28,7 @@ import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.InvocationInterceptor; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; import org.junit.jupiter.api.extension.TestInstances; import org.junit.jupiter.api.extension.TestWatcher; @@ -41,7 +42,6 @@ import org.junit.platform.commons.logging.Logger; import org.junit.platform.commons.logging.LoggerFactory; import org.junit.platform.commons.util.BlacklistedExceptions; -import org.junit.platform.commons.util.ExceptionUtils; import org.junit.platform.commons.util.ReflectionUtils; import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestExecutionResult; @@ -154,9 +154,23 @@ private void invokeBeforeEachCallbacks(JupiterEngineExecutionContext context) { private void invokeBeforeEachMethods(JupiterEngineExecutionContext context) { ExtensionRegistry registry = context.getExtensionRegistry(); - invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(context, - ((extensionContext, adapter) -> () -> adapter.invokeBeforeEachMethod(extensionContext, registry)), - BeforeEachMethodAdapter.class); + invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(context, ((extensionContext, adapter) -> () -> { + try { + adapter.invokeBeforeEachMethod(extensionContext, registry); + } + catch (Throwable throwable) { + invokeBeforeEachExecutionExceptionHandlers(extensionContext, registry, throwable); + } + }), BeforeEachMethodAdapter.class); + } + + private void invokeBeforeEachExecutionExceptionHandlers(ExtensionContext context, ExtensionRegistry registry, + Throwable throwable) { + + invokeExecutionExceptionHandlers(throwable, + registry.getReversedExtensions(LifecycleMethodExecutionExceptionHandler.class), + (ex, handler) -> () -> ((LifecycleMethodExecutionExceptionHandler) handler).handleBeforeEachMethodExecutionException( + context, ex)); } private void invokeBeforeTestExecutionCallbacks(JupiterEngineExecutionContext context) { @@ -203,26 +217,9 @@ protected void invokeTestMethod(JupiterEngineExecutionContext context, DynamicTe private void invokeTestExecutionExceptionHandlers(ExtensionRegistry registry, ExtensionContext context, Throwable ex) { - invokeTestExecutionExceptionHandlers(ex, registry.getReversedExtensions(TestExecutionExceptionHandler.class), - context); - } - - private void invokeTestExecutionExceptionHandlers(Throwable ex, List handlers, - ExtensionContext context) { - - // No handlers left? - if (handlers.isEmpty()) { - ExceptionUtils.throwAsUncheckedException(ex); - } - - try { - // Invoke next available handler - handlers.remove(0).handleTestExecutionException(context, ex); - } - catch (Throwable t) { - BlacklistedExceptions.rethrowIfBlacklisted(t); - invokeTestExecutionExceptionHandlers(t, handlers, context); - } + invokeExecutionExceptionHandlers(ex, registry.getReversedExtensions(TestExecutionExceptionHandler.class), + (throwable, handler) -> () -> ((TestExecutionExceptionHandler) handler).handleTestExecutionException( + context, throwable)); } private void invokeAfterTestExecutionCallbacks(JupiterEngineExecutionContext context) { @@ -233,9 +230,24 @@ private void invokeAfterTestExecutionCallbacks(JupiterEngineExecutionContext con private void invokeAfterEachMethods(JupiterEngineExecutionContext context) { ExtensionRegistry registry = context.getExtensionRegistry(); - invokeAllAfterMethodsOrCallbacks(context, - ((extensionContext, adapter) -> () -> adapter.invokeAfterEachMethod(extensionContext, registry)), - AfterEachMethodAdapter.class); + invokeAllAfterMethodsOrCallbacks(context, ((extensionContext, adapter) -> () -> { + try { + adapter.invokeAfterEachMethod(extensionContext, registry); + } + catch (Throwable throwable) { + invokeAfterEachExecutionExceptionHandlers(extensionContext, registry, throwable); + } + }), AfterEachMethodAdapter.class); + } + + private void invokeAfterEachExecutionExceptionHandlers(ExtensionContext context, ExtensionRegistry registry, + Throwable throwable) { + + invokeExecutionExceptionHandlers(throwable, + registry.getReversedExtensions(LifecycleMethodExecutionExceptionHandler.class), + (ex, handler) -> () -> ((LifecycleMethodExecutionExceptionHandler) handler).handleAfterEachMethodExecutionException( + context, ex)); + } private void invokeAfterEachCallbacks(JupiterEngineExecutionContext context) { From 280fb4427409e455917c499ebeb4fa5e8dbde6a3 Mon Sep 17 00:00:00 2001 From: Mateusz Pietryga Date: Tue, 28 May 2019 22:22:42 +0200 Subject: [PATCH 2/4] Implement tests for LifecycleMethodExecutionExceptionHandler Issue #1454 --- .../api/extension/KitchenSinkExtension.java | 21 + ...MethodExecutionExceptionHandlersTests.java | 568 ++++++++++++++++++ 2 files changed, 589 insertions(+) create mode 100644 junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/LifecycleMethodExecutionExceptionHandlersTests.java diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java index 4c4d773ed12d..8e9592aea64c 100644 --- a/junit-jupiter-engine/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/api/extension/KitchenSinkExtension.java @@ -40,6 +40,9 @@ public class KitchenSinkExtension implements AfterEachCallback, AfterAllCallback, + // Lifecycle methods exception handling + LifecycleMethodExecutionExceptionHandler, + // Dependency Injection TestInstanceFactory, TestInstancePostProcessor, @@ -88,6 +91,24 @@ public void afterEach(ExtensionContext context) { public void afterAll(ExtensionContext context) { } + // --- Lifecycle methods exception handling + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + } + // --- Dependency Injection ------------------------------------------------ @Override diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/LifecycleMethodExecutionExceptionHandlersTests.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/LifecycleMethodExecutionExceptionHandlersTests.java new file mode 100644 index 000000000000..992e6b1d1aac --- /dev/null +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/LifecycleMethodExecutionExceptionHandlersTests.java @@ -0,0 +1,568 @@ +/* + * Copyright 2015-2019 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.engine.extension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass; +import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request; +import static org.junit.platform.testkit.engine.EventConditions.container; +import static org.junit.platform.testkit.engine.EventConditions.engine; +import static org.junit.platform.testkit.engine.EventConditions.event; +import static org.junit.platform.testkit.engine.EventConditions.finishedSuccessfully; +import static org.junit.platform.testkit.engine.EventConditions.finishedWithFailure; +import static org.junit.platform.testkit.engine.EventConditions.started; +import static org.junit.platform.testkit.engine.EventConditions.test; +import static org.junit.platform.testkit.engine.TestExecutionResultConditions.instanceOf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; +import org.junit.jupiter.engine.AbstractJupiterTestEngineTests; +import org.junit.platform.launcher.LauncherDiscoveryRequest; +import org.junit.platform.testkit.engine.EngineExecutionResults; + +/** + * Tests that verify the support for lifecycle methods execution exception handling + * via {@link LifecycleMethodExecutionExceptionHandler} + * + * @since 5.5 + */ +class LifecycleMethodExecutionExceptionHandlersTests extends AbstractJupiterTestEngineTests { + + private static List handlerCalls = new ArrayList<>(); + private static boolean throwExceptionBeforeAll; + private static boolean throwExceptionBeforeEach; + private static boolean throwExceptionAfterEach; + private static boolean throwExceptionAfterAll; + + @BeforeEach + void resetStatics() { + throwExceptionBeforeAll = true; + throwExceptionBeforeEach = true; + throwExceptionAfterEach = true; + throwExceptionAfterAll = true; + handlerCalls.clear(); + + SwallowExceptionHandler.beforeAllCalls = 0; + SwallowExceptionHandler.beforeEachCalls = 0; + SwallowExceptionHandler.afterEachCalls = 0; + SwallowExceptionHandler.afterAllCalls = 0; + + RethrowExceptionHandler.beforeAllCalls = 0; + RethrowExceptionHandler.beforeEachCalls = 0; + RethrowExceptionHandler.afterEachCalls = 0; + RethrowExceptionHandler.afterAllCalls = 0; + + ConvertExceptionHandler.beforeAllCalls = 0; + ConvertExceptionHandler.beforeEachCalls = 0; + ConvertExceptionHandler.afterEachCalls = 0; + ConvertExceptionHandler.afterAllCalls = 0; + + BlacklistedExceptionHandler.beforeAllCalls = 0; + BlacklistedExceptionHandler.beforeEachCalls = 0; + BlacklistedExceptionHandler.afterEachCalls = 0; + BlacklistedExceptionHandler.afterAllCalls = 0; + + ShouldNotBeCalledHandler.beforeAllCalls = 0; + ShouldNotBeCalledHandler.beforeEachCalls = 0; + ShouldNotBeCalledHandler.afterEachCalls = 0; + ShouldNotBeCalledHandler.afterAllCalls = 0; + } + + @Test + void classLevelExceptionHandlersRethrowException() { + LauncherDiscoveryRequest request = request().selectors(selectClass(RethrowingTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + assertEquals(1, RethrowExceptionHandler.beforeAllCalls, "Exception should handled in @BeforeAll"); + assertEquals(1, RethrowExceptionHandler.afterAllCalls, "Exception should handled in @AfterAll"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(RethrowingTestCase.class), started()), // + event(container(RethrowingTestCase.class), finishedWithFailure(instanceOf(RuntimeException.class))), // + event(engine(), finishedSuccessfully())); + } + + @Test + void testLevelExceptionHandlersRethrowException() { + throwExceptionBeforeAll = false; + throwExceptionAfterAll = false; + LauncherDiscoveryRequest request = request().selectors(selectClass(RethrowingTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + assertEquals(1, RethrowExceptionHandler.beforeEachCalls, "Exception should be handled in @BeforeEach"); + assertEquals(1, RethrowExceptionHandler.afterEachCalls, "Exception should be handled in @AfterEach"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(RethrowingTestCase.class), started()), // + event(test("aTest"), started()), // + event(test("aTest"), finishedWithFailure(instanceOf(RuntimeException.class))), // + event(container(RethrowingTestCase.class), finishedSuccessfully()), // + event(engine(), finishedSuccessfully())); + } + + @Test + void classLevelExceptionHandlersConvertException() { + LauncherDiscoveryRequest request = request().selectors(selectClass(ConvertingTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + assertEquals(1, ConvertExceptionHandler.beforeAllCalls, "Exception should handled in @BeforeAll"); + assertEquals(1, ConvertExceptionHandler.afterAllCalls, "Exception should handled in @AfterAll"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(ConvertingTestCase.class), started()), // + event(container(ConvertingTestCase.class), finishedWithFailure(instanceOf(IOException.class))), // + event(engine(), finishedSuccessfully())); + } + + @Test + void testLevelExceptionHandlersConvertException() { + throwExceptionBeforeAll = false; + throwExceptionAfterAll = false; + LauncherDiscoveryRequest request = request().selectors(selectClass(ConvertingTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + assertEquals(1, ConvertExceptionHandler.beforeEachCalls, "Exception should be handled in @BeforeEach"); + assertEquals(1, ConvertExceptionHandler.afterEachCalls, "Exception should be handled in @AfterEach"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(ConvertingTestCase.class), started()), // + event(test("aTest"), started()), // + event(test("aTest"), finishedWithFailure(instanceOf(IOException.class))), // + event(container(ConvertingTestCase.class), finishedSuccessfully()), // + event(engine(), finishedSuccessfully())); + } + + @Test + void exceptionHandlersSwallowException() { + LauncherDiscoveryRequest request = request().selectors(selectClass(SwallowingTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + assertEquals(1, SwallowExceptionHandler.beforeAllCalls, "Exception should be handled in @BeforeAll"); + assertEquals(1, SwallowExceptionHandler.beforeEachCalls, "Exception should be handled in @BeforeEach"); + assertEquals(1, SwallowExceptionHandler.afterEachCalls, "Exception should be handled in @AfterEach"); + assertEquals(1, SwallowExceptionHandler.afterAllCalls, "Exception should be handled in @AfterAll"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(SwallowingTestCase.class), started()), // + event(test("aTest"), started()), // + event(test("aTest"), finishedSuccessfully()), // + event(container(SwallowingTestCase.class), finishedSuccessfully()), // + event(engine(), finishedSuccessfully())); + } + + @Test + void perClassLifecycleMethodsAreHandled() { + LauncherDiscoveryRequest request = request().selectors(selectClass(PerClassLifecycleTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + assertEquals(2, SwallowExceptionHandler.beforeAllCalls, "Exception should be handled in @BeforeAll"); + assertEquals(1, SwallowExceptionHandler.beforeEachCalls, "Exception should be handled in @BeforeEach"); + assertEquals(1, SwallowExceptionHandler.afterEachCalls, "Exception should be handled in @AfterEach"); + assertEquals(2, SwallowExceptionHandler.afterAllCalls, "Exception should be handled in @AfterAll"); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(PerClassLifecycleTestCase.class), started()), // + event(test("aTest"), started()), // + event(test("aTest"), finishedSuccessfully()), // + event(container(PerClassLifecycleTestCase.class), finishedSuccessfully()), // + event(engine(), finishedSuccessfully())); + } + + @Test + void multipleHandlersAreCalledInOrder() { + LauncherDiscoveryRequest request = request().selectors(selectClass(MultipleHandlersTestCase.class)).build(); + EngineExecutionResults executionResults = executeTests(request); + + executionResults.all().assertEventsMatchExactly( // + event(engine(), started()), // + event(container(MultipleHandlersTestCase.class), started()), // + event(test("aTest"), started()), // + event(test("aTest"), finishedSuccessfully()), // + event(test("aTest2"), started()), // + event(test("aTest2"), finishedSuccessfully()), // + event(container(MultipleHandlersTestCase.class), finishedSuccessfully()), // + event(engine(), finishedSuccessfully())); // + + assertEquals(Arrays.asList( + // BeforeAll chain (class level only) + "RethrowExceptionBeforeAll", "SwallowExceptionBeforeAll", + // BeforeEach chain for aTest (test + class level) + "ConvertExceptionBeforeEach", "RethrowExceptionBeforeEach", "SwallowExceptionBeforeEach", + // AfterEach chain for aTest (test + class level) + "ConvertExceptionAfterEach", "RethrowExceptionAfterEach", "SwallowExceptionAfterEach", + // BeforeEach chain for aTest2 (class level only) + "RethrowExceptionBeforeEach", "SwallowExceptionBeforeEach", + // AfterEach chain for aTest2 (class level only) + "RethrowExceptionAfterEach", "SwallowExceptionAfterEach", + // AfterAll chain (class level only) + "RethrowExceptionAfterAll", "SwallowExceptionAfterAll" // + ), handlerCalls, "Wrong order of handler calls"); + } + + @Test + void blacklistedExceptionsAreNotPropagatedInBeforeAll() { + throwExceptionBeforeAll = true; + throwExceptionBeforeEach = false; + throwExceptionAfterEach = false; + throwExceptionAfterAll = false; + + boolean blackListedExceptionThrown = executeThrowingOutOfMemoryException(); + assertTrue(blackListedExceptionThrown, "Blacklisted Exception should be thrown"); + assertEquals(1, BlacklistedExceptionHandler.beforeAllCalls, "Exception should be handled in @BeforeAll"); + assertEquals(0, ShouldNotBeCalledHandler.beforeAllCalls, "Exception should not propagate in @BeforeAll"); + } + + @Test + void blacklistedExceptionsAreNotPropagatedInBeforeEach() { + throwExceptionBeforeAll = false; + throwExceptionBeforeEach = true; + throwExceptionAfterEach = false; + throwExceptionAfterAll = false; + + boolean blackListedExceptionThrown = executeThrowingOutOfMemoryException(); + assertTrue(blackListedExceptionThrown, "Blacklisted Exception should be thrown"); + assertEquals(1, BlacklistedExceptionHandler.beforeEachCalls, "Exception should be handled in @BeforeEach"); + assertEquals(0, ShouldNotBeCalledHandler.beforeEachCalls, "Exception should not propagate in @BeforeEach"); + } + + @Test + void blacklistedExceptionsAreNotPropagatedInAfterEach() { + throwExceptionBeforeAll = false; + throwExceptionBeforeEach = false; + throwExceptionAfterEach = true; + throwExceptionAfterAll = false; + + boolean blackListedExceptionThrown = executeThrowingOutOfMemoryException(); + assertTrue(blackListedExceptionThrown, "Blacklisted Exception should be thrown"); + assertEquals(1, BlacklistedExceptionHandler.afterEachCalls, "Exception should be handled in @AfterEach"); + assertEquals(0, ShouldNotBeCalledHandler.afterEachCalls, "Exception should not propagate in @AfterEach"); + } + + @Test + void blacklistedExceptionsAreNotPropagatedInAfterAll() { + throwExceptionBeforeAll = false; + throwExceptionBeforeEach = false; + throwExceptionAfterEach = false; + throwExceptionAfterAll = true; + + boolean blackListedExceptionThrown = executeThrowingOutOfMemoryException(); + assertTrue(blackListedExceptionThrown, "Blacklisted Exception should be thrown"); + assertEquals(1, BlacklistedExceptionHandler.afterAllCalls, "Exception should be handled in @AfterAll"); + assertEquals(0, ShouldNotBeCalledHandler.afterAllCalls, "Exception should not propagate in @AfterAll"); + } + + private boolean executeThrowingOutOfMemoryException() { + LauncherDiscoveryRequest request = request().selectors(selectClass(BlacklistedExceptionTestCase.class)).build(); + try { + executeTests(request); + } + catch (OutOfMemoryError expected) { + return true; + } + return false; + } + + // ------------------------------------------ + + static class BaseTestCase { + @BeforeAll + static void throwBeforeAll() { + if (throwExceptionBeforeAll) { + throw new RuntimeException("BeforeAllEx"); + } + } + + @BeforeEach + void throwBeforeEach() { + if (throwExceptionBeforeEach) { + throw new RuntimeException("BeforeEachEx"); + } + } + + @Test + void aTest() { + } + + @AfterEach + void throwAfterEach() { + if (throwExceptionAfterEach) { + throw new RuntimeException("AfterEachEx"); + } + } + + @AfterAll + static void throwAfterAll() { + if (throwExceptionAfterAll) { + throw new RuntimeException("AfterAllEx"); + } + } + } + + @ExtendWith(RethrowExceptionHandler.class) + static class RethrowingTestCase extends BaseTestCase { + } + + @ExtendWith(ConvertExceptionHandler.class) + static class ConvertingTestCase extends BaseTestCase { + } + + @ExtendWith(SwallowExceptionHandler.class) + static class SwallowingTestCase extends BaseTestCase { + } + + @ExtendWith(ShouldNotBeCalledHandler.class) + @ExtendWith(BlacklistedExceptionHandler.class) + static class BlacklistedExceptionTestCase extends BaseTestCase { + } + + @ExtendWith(ShouldNotBeCalledHandler.class) + @ExtendWith(SwallowExceptionHandler.class) + @ExtendWith(RethrowExceptionHandler.class) + @TestMethodOrder(MethodOrderer.OrderAnnotation.class) + static class MultipleHandlersTestCase extends BaseTestCase { + + @ExtendWith(ConvertExceptionHandler.class) + @Order(1) + @Test + void aTest() { + } + + @Order(2) + @Test + void aTest2() { + } + } + + @ExtendWith(SwallowExceptionHandler.class) + @TestInstance(TestInstance.Lifecycle.PER_CLASS) + static class PerClassLifecycleTestCase extends BaseTestCase { + + @BeforeAll + void beforeAll() { + throw new RuntimeException("nonStaticBeforeAllEx"); + } + + @AfterAll + void afterAll() { + throw new RuntimeException("nonStaticAfterAllEx"); + } + } + + // ------------------------------------------ + + static class RethrowExceptionHandler implements LifecycleMethodExecutionExceptionHandler { + static int beforeAllCalls = 0; + static int beforeEachCalls = 0; + static int afterEachCalls = 0; + static int afterAllCalls = 0; + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + beforeAllCalls++; + handlerCalls.add("RethrowExceptionBeforeAll"); + throw throwable; + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + beforeEachCalls++; + handlerCalls.add("RethrowExceptionBeforeEach"); + throw throwable; + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterEachCalls++; + handlerCalls.add("RethrowExceptionAfterEach"); + throw throwable; + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterAllCalls++; + handlerCalls.add("RethrowExceptionAfterAll"); + throw throwable; + } + } + + static class SwallowExceptionHandler implements LifecycleMethodExecutionExceptionHandler { + static int beforeAllCalls = 0; + static int beforeEachCalls = 0; + static int afterEachCalls = 0; + static int afterAllCalls = 0; + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + beforeAllCalls++; + handlerCalls.add("SwallowExceptionBeforeAll"); + // Do not rethrow + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + beforeEachCalls++; + handlerCalls.add("SwallowExceptionBeforeEach"); + // Do not rethrow + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + afterEachCalls++; + handlerCalls.add("SwallowExceptionAfterEach"); + // Do not rethrow + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + afterAllCalls++; + handlerCalls.add("SwallowExceptionAfterAll"); + // Do not rethrow + } + } + + static class ConvertExceptionHandler implements LifecycleMethodExecutionExceptionHandler { + static int beforeAllCalls = 0; + static int beforeEachCalls = 0; + static int afterEachCalls = 0; + static int afterAllCalls = 0; + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + beforeAllCalls++; + handlerCalls.add("ConvertExceptionBeforeAll"); + throw new IOException(throwable); + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + beforeEachCalls++; + handlerCalls.add("ConvertExceptionBeforeEach"); + throw new IOException(throwable); + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterEachCalls++; + handlerCalls.add("ConvertExceptionAfterEach"); + throw new IOException(throwable); + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterAllCalls++; + handlerCalls.add("ConvertExceptionAfterAll"); + throw new IOException(throwable); + } + } + + static class BlacklistedExceptionHandler implements LifecycleMethodExecutionExceptionHandler { + static int beforeAllCalls = 0; + static int beforeEachCalls = 0; + static int afterEachCalls = 0; + static int afterAllCalls = 0; + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + beforeAllCalls++; + handlerCalls.add("BlacklistedExceptionBeforeAll"); + throw new OutOfMemoryError(); + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + beforeEachCalls++; + handlerCalls.add("BlacklistedExceptionBeforeEach"); + throw new OutOfMemoryError(); + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) { + afterEachCalls++; + handlerCalls.add("BlacklistedExceptionAfterEach"); + throw new OutOfMemoryError(); + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) { + afterAllCalls++; + handlerCalls.add("BlacklistedExceptionAfterAll"); + throw new OutOfMemoryError(); + } + } + + static class ShouldNotBeCalledHandler implements LifecycleMethodExecutionExceptionHandler { + static int beforeAllCalls = 0; + static int beforeEachCalls = 0; + static int afterEachCalls = 0; + static int afterAllCalls = 0; + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + beforeAllCalls++; + handlerCalls.add("ShouldNotBeCalledBeforeAll"); + throw throwable; + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + ShouldNotBeCalledHandler.beforeEachCalls++; + handlerCalls.add("ShouldNotBeCalledBeforeEach"); + throw throwable; + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterEachCalls++; + handlerCalls.add("ShouldNotBeCalledAfterEach"); + throw throwable; + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable throwable) + throws Throwable { + afterAllCalls++; + handlerCalls.add("ShouldNotBeCalledAfterAll"); + throw throwable; + } + } +} From c239e4db4fbb1939943da8b3f8fe9d11b8be8c22 Mon Sep 17 00:00:00 2001 From: Mateusz Pietryga Date: Tue, 28 May 2019 23:27:46 +0200 Subject: [PATCH 3/4] Add user guide and release notes entries on LifecycleMethodExecutionExceptionHandler Issue #1454 --- .../src/docs/asciidoc/link-attributes.adoc | 1 + .../release-notes-5.5.0-RC1.adoc | 4 + .../docs/asciidoc/user-guide/extensions.adoc | 81 +++++++++++++++--- .../images/extensions_lifecycle.png | Bin 128286 -> 48591 bytes .../exception/MultipleHandlersTestCase.java | 60 +++++++++++++ .../RecordStateOnErrorExtension.java | 53 ++++++++++++ 6 files changed, 185 insertions(+), 14 deletions(-) create mode 100644 documentation/src/test/java/example/exception/MultipleHandlersTestCase.java create mode 100644 documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java diff --git a/documentation/src/docs/asciidoc/link-attributes.adoc b/documentation/src/docs/asciidoc/link-attributes.adoc index de75ec74cb36..841c6f3cbcd2 100644 --- a/documentation/src/docs/asciidoc/link-attributes.adoc +++ b/documentation/src/docs/asciidoc/link-attributes.adoc @@ -81,6 +81,7 @@ endif::[] :ExtensionContext: {javadoc-root}/org/junit/jupiter/api/extension/ExtensionContext.html[ExtensionContext] :ExtensionContext_Store: {javadoc-root}/org/junit/jupiter/api/extension/ExtensionContext.Store.html[Store] :InvocationInterceptor: {javadoc-root}/org/junit/jupiter/api/extension/InvocationInterceptor.html[InvocationInterceptor] +:LifecycleMethodExecutionExceptionHandler: {javadoc-root}/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.html[LifecycleMethodExecutionExceptionHandler] :ParameterResolver: {javadoc-root}/org/junit/jupiter/api/extension/ParameterResolver.html[ParameterResolver] :RegisterExtension: {javadoc-root}/org/junit/jupiter/api/extension/RegisterExtension.html[@RegisterExtension] :TestExecutionExceptionHandler: {javadoc-root}/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.html[TestExecutionExceptionHandler] diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.5.0-RC1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.5.0-RC1.adoc index b6e19fd7fdd3..f9c3c0d55e3d 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.5.0-RC1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.5.0-RC1.adoc @@ -79,6 +79,10 @@ on GitHub. * New `InvocationInterceptor` extension API (see <<../user-guide/index.adoc#extensions-intercepting-invocations, User Guide>> for details). +* New extension APIs for handling exceptions during execution of lifecycle methods: + `@BeforeAll`, `@BeforeEach`, `@AfterEach` and `@AfterAll` (see + <<../user-guide/index.adoc#extensions-exception-handling, User Guide>> for + details) * Added support for method URIs, e.g. `method:org.junit.Foo#bar()`, to `DynamicContainer` and `DynamicTest` factory methods. diff --git a/documentation/src/docs/asciidoc/user-guide/extensions.adoc b/documentation/src/docs/asciidoc/user-guide/extensions.adoc index 3b6160c01766..f02ebcb83212 100644 --- a/documentation/src/docs/asciidoc/user-guide/extensions.adoc +++ b/documentation/src/docs/asciidoc/user-guide/extensions.adoc @@ -433,18 +433,51 @@ INFO: Method [sleep50ms] took 53 ms. [[extensions-exception-handling]] === Exception Handling -`{TestExecutionExceptionHandler}` defines the API for `Extensions` that wish to handle -exceptions thrown during test execution. +Exceptions thrown during the test execution may be intercepted and handled accordingly +before propagating further, so that certain actions like error logging or resource releasing +may be defined in specialized `Extensions`. JUnit Jupiter offers API for `Extensions` that +wish to handle exceptions thrown during `@Test` methods via `{TestExecutionExceptionHandler}` +and for those thrown during one of test lifecycle methods (`@BeforeAll`, `@BeforeEach`, +`@AfterEach` and `@AfterAll`) via `{LifecycleMethodExecutionExceptionHandler}`. The following example shows an extension which will swallow all instances of `IOException` but rethrow any other type of exception. [source,java,indent=0] -.An exception handling extension +.An exception handling extension that filters IOExceptions in test execution ---- include::{testDir}/example/exception/IgnoreIOExceptionExtension.java[tags=user_guide] ---- +Another example shows how to record the state of an application under test exactly at +the point of unexpected exception being thrown during setup and cleanup. Note that unlike +relying on lifecycle callbacks, which may or may not be executed depending on the test +status, this solution guarantees execution immediately after failing `@BeforeAll`, +`@BeforeEach`, `@AfterEach` or `@AfterAll`. + +[source,java,indent=0] +.An exception handling extension that records application state on error +---- +include::{testDir}/example/exception/RecordStateOnErrorExtension.java[tags=user_guide] +---- + +Multiple execution exception handlers may be invoked for the same lifecycle method in +order of declaration. If one of the handlers swallows the handled exception, subsequent +ones will not be executed, and no failure will be propagated to JUnit engine, as if the +exception was never thrown. Handlers may also choose to rethrow the exception or throw +a different one, potentially wrapping the original. + +Extensions implementing `{LifecycleMethodExecutionExceptionHandler}` that wish to handle +exceptions thrown during `@BeforeAll` or `@AfterAll` need to be registered on a class level, +while handlers for `BeforeEach` and `AfterEach` may be also registered for individual +test methods. + +[source,java,indent=0] +.An exception handling extension that records application state on error +---- +include::{testDir}/example/exception/MultipleHandlersTestCase.java[tags=user_guide] +---- + [[extensions-intercepting-invocations]] === Intercepting Invocations @@ -584,7 +617,7 @@ test method and will be repeated for every test method in the test class. [#extensions-execution-order-diagram,reftext='{figure-caption}'] image::extensions_lifecycle.png[caption='',title='{figure-caption}'] -The following table further explains the twelve steps in the +The following table further explains the sixteen steps in the <> diagram. [cols="5,15,80"] @@ -600,48 +633,68 @@ The following table further explains the twelve steps in the | user code executed before all tests of the container are executed | 3 +| interface `org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler +#handleBeforeAllMethodExecutionException` +| extension code for handling exceptions thrown during a method annotated with `@BeforeAll` + +| 4 | interface `org.junit.jupiter.api.extension.BeforeEachCallback` | extension code executed before each test is executed -| 4 +| 5 | annotation `org.junit.jupiter.api.BeforeEach` | user code executed before each test is executed -| 5 +| 6 +| interface `org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler +#handleBeforeEachMethodExecutionException` +| extension code for handling exceptions thrown during a method annotated with `@BeforeEach` + +| 7 | interface `org.junit.jupiter.api.extension.BeforeTestExecutionCallback` | extension code executed immediately before a test is executed -| 6 +| 8 | annotation `org.junit.jupiter.api.Test` | user code of the actual test method -| 7 +| 9 | interface `org.junit.jupiter.api.extension.TestExecutionExceptionHandler` | extension code for handling exceptions thrown during a test -| 8 +| 10 | interface `org.junit.jupiter.api.extension.AfterTestExecutionCallback` | extension code executed immediately after test execution and its corresponding exception handlers -| 9 +| 11 | annotation `org.junit.jupiter.api.AfterEach` | user code executed after each test is executed -| 10 +| 12 +| interface `org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler +#handleAfterEachMethodExecutionException` +| extension code for handling exceptions thrown during a method annotated with `@AfterEach` + +| 13 | interface `org.junit.jupiter.api.extension.AfterEachCallback` | extension code executed after each test is executed -| 11 +| 14 | annotation `org.junit.jupiter.api.AfterAll` | user code executed after all tests of the container are executed -| 12 +| 15 +| interface `org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler +#handleAfterAllMethodExecutionException` +| extension code for handling exceptions thrown during a method annotated with `@AfterAll` + +| 16 | interface `org.junit.jupiter.api.extension.AfterAllCallback` | extension code executed after all tests of the container are executed |=== -In the simplest case only the actual test method will be executed (step 6); all other +In the simplest case only the actual test method will be executed (step 8); all other steps are optional depending on the presence of user code or extension support for the corresponding lifecycle callback. For further details on the various lifecycle callbacks please consult the respective Javadoc for each annotation and extension. diff --git a/documentation/src/docs/asciidoc/user-guide/images/extensions_lifecycle.png b/documentation/src/docs/asciidoc/user-guide/images/extensions_lifecycle.png index c55713437b337c0e13237173bd944eaf97401edc..7f867b8a7d1fb1768932edcb2d529194d17f1fd0 100644 GIT binary patch literal 48591 zcmdqJcUV*3*C!eqC@KijtI~^rfS^c|8UZPR1f(mS072;;6%^@GLhliQ(4>SCnuXqj zgc6z{O(00`!W`u5?|t8yJI~DAduN`R`Ge;?DP*s`_S$QG_WFFz3DMRBUnOHC1A#zS zRUazpfI#Q$fIsDnXMuMRK^%3!<&29CSOHYr!~7F?ao$E=LmmVwjkrh^+2IWL z{o=OsJZfhlRQDj%MC>-U1zR(@Cf>SHnqD*K?Jsv#uv=tKX61R5PnUQLX0Ckjz<;O~ zun`2Z&ty3RT%OQWaGbm>eC2)~xV(Vv6V|GZegu5b=A|Zkt&lb5$d~;w3&qm7Ry4V% zew=$ebUbyu7W?NjZQeMkTgRiv8*&HD0b4}&t7bVREXPsDy%~HoC%;)OcJ%9bVZJZ& z`Ep1jnFBR}!mf=^yPzCgTqaxM7B9OPHq)~bg6qF?^M=_YrgwQ3GMCU*>A zjhhhxW(YR2ZZ7WW^&d`ts4*X;TW9W%P@Mn9Xk)?au-adT1gChWs@c2#2Rlv-Z@!5d z+{>B$<`kgYyV2Hi=9n08I2f=Wc#OFN%zC*ghp+~g-O)__48uWkb<2lMT5PE?bYb=R zGjGF0wGoXSH2BA1*q}DOhjOd=B@dbSVkqji=e#wTtS~#i_CtrxSe=irt~Oe6w35!w$NXp&II3JdMeYowMxi z{zBn;Pj^>L3Ai!t@W+%gH*<27}g}fo}ls5p}fGh^&MYXsSZw`OHPS6d+Ew?j;yu$-Xq#glBZ4A##=uL zvuues=yHcdWMr;;FaUlhdhru&kGAFf)rt36)PGa*sk6j36s*4-ni!ZOuueVg6D;C{ zsW0#xIGAncaW&p>?SgOmu#BU7el=^K8^0>IA{w9%PYJQTI2XU>^*kkB*zd>WfnHD% zZ8JlS&RX4E78#Qny(2IGI6jk+0Bin6BCHvqw;gXaLX7fVVcF_1VZV~gMYWKb+U68%yZ zqw4ih^?chKM*jOmr}$AB2bV0y>*@Zr=T$t)opn~X^=K~04RJ}--X>gg9M9GkfK;;< z-H!}6QIH8!liFv9WS^&lgD+UCRvv6TS>k+oBa9@{3& zQottB!|iLDSbU>t!P@_iAMD|+i2NQ&BQ+?}oBfW#mMCAwTFy_HLMeu1FwSI)Rz&@E z(4DSSO7vuTOWY4-9Ix}!z|PrbYzAez)A>m&zqk;qTeki*aC5%9lY1B(oN~O1rK0v4 zKFV>f!y|`$gcK`|_xv zg)1xDWGa5OBBVA!jBMfV>RWF_SI0GQH|FA({NHCNysEH@yJnGc8I>k%ixFDF!3)t= znwX}OO!9&zecQ>(b@f0z#z|FfZ)U0C8KX!7WA?#^j;8rU$4N-n+<^91f2c~?6aTwn zRjHg=(_q$PRZWwiY*_ZKP4Fd=70;&?8yAWOtz--%a%g9>2CClPmd*~H;m9yJ2Lg3@ z84`KXMzV*l4?W}_FN-EHvd<_VOthgqf>W9tG|9w+6c$oG{oTb>A~=DXhA{!RYH709Nz zuiDjn{K!K3SCFpHs#$3M&Xr%{Z!(H`*NO_-!aVu7Qr_XP+E9cCD>IrKkyKCu_dt!Z z?QfNKzs9L3K&g%L9A{gX@}8tRKG&(Zxg(CK#w&aFT&8~NNm(MqCVs(37n)-iE;t`@ zRfNC~)WR1j&-2{}MCLXebX+-G<%Oniu+gMNi|QtXBq3f)Q(?(vAjrkcG*V-~xmqgt z(rp!o+|0$}`Oe08BLbBUN5z*sXtt8MvLU)Ggi80@d$f_`C5=kfuc20hHmGd3E&(5% zijEg5`70_RHXjTVcF){Us#G7&(74yt8*uv)EC*lW;sk7xswq1R%Js#SX%?N#uUf>t z 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 literal 128286 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

X_e}N-I@=w1)HxytvTvb1uW0h^0MRQuo6k&A@%Z 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 diff --git a/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java b/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java new file mode 100644 index 000000000000..76578ddc129f --- /dev/null +++ b/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java @@ -0,0 +1,60 @@ +/* + * Copyright 2015-2019 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 example.exception; + +import static example.exception.MultipleHandlersTestCase.ThirdExecutedHandler; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; +import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; + +// @formatter:off +// tag::user_guide[] +// Register handlers for @Test, @BeforeEach, @AfterEach as well as @BeforeAll and @AfterAll +@ExtendWith({ThirdExecutedHandler.class}) +class MultipleHandlersTestCase { + + // Register handlers for @Test, @BeforeEach, @AfterEach only + @ExtendWith(SecondExecutedHandler.class) + @ExtendWith(FirstExecutedHandler.class) + @Test + void testMethod() { + } + + // end::user_guide[] + + static class FirstExecutedHandler implements TestExecutionExceptionHandler { + @Override + public void handleTestExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + throw ex; + } + } + + static class SecondExecutedHandler implements LifecycleMethodExecutionExceptionHandler { + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + throw ex; + } + } + + static class ThirdExecutedHandler implements LifecycleMethodExecutionExceptionHandler { + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + throw ex; + } + } +} +// @formatter:on diff --git a/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java b/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java new file mode 100644 index 000000000000..00246333d00f --- /dev/null +++ b/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java @@ -0,0 +1,53 @@ +/* + * Copyright 2015-2019 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 example.exception; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.LifecycleMethodExecutionExceptionHandler; + +// @formatter:off +// tag::user_guide[] +class RecordStateOnErrorExtension implements LifecycleMethodExecutionExceptionHandler { + + @Override + public void handleBeforeAllMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + memoryDumpForFurtherInvestigation("Failure recorded during class setup"); + throw ex; + } + + @Override + public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + memoryDumpForFurtherInvestigation("Failure recorded during test setup"); + throw ex; + } + + @Override + public void handleAfterEachMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + memoryDumpForFurtherInvestigation("Failure recorded during test cleanup"); + throw ex; + } + + @Override + public void handleAfterAllMethodExecutionException(ExtensionContext context, Throwable ex) + throws Throwable { + memoryDumpForFurtherInvestigation("Failure recorded during class cleanup"); + throw ex; + } + // end::user_guide[] + + private void memoryDumpForFurtherInvestigation(String error) { + + } +} +// @formatter:on From ba99767aa1e9f30b66edd71b057b9f43a4a3a5b9 Mon Sep 17 00:00:00 2001 From: Mateusz Pietryga Date: Thu, 30 May 2019 18:49:39 +0200 Subject: [PATCH 4/4] Apply suggestions from code review Co-Authored-By: Marc Philipp --- documentation/src/docs/asciidoc/user-guide/extensions.adoc | 2 +- .../test/java/example/exception/MultipleHandlersTestCase.java | 4 +++- .../java/example/exception/RecordStateOnErrorExtension.java | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/documentation/src/docs/asciidoc/user-guide/extensions.adoc b/documentation/src/docs/asciidoc/user-guide/extensions.adoc index f02ebcb83212..942553ace859 100644 --- a/documentation/src/docs/asciidoc/user-guide/extensions.adoc +++ b/documentation/src/docs/asciidoc/user-guide/extensions.adoc @@ -473,7 +473,7 @@ while handlers for `BeforeEach` and `AfterEach` may be also registered for indiv test methods. [source,java,indent=0] -.An exception handling extension that records application state on error +.Registering multiple exception handling extensions ---- include::{testDir}/example/exception/MultipleHandlersTestCase.java[tags=user_guide] ---- diff --git a/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java b/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java index 76578ddc129f..9dc53fd5ae8c 100644 --- a/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java +++ b/documentation/src/test/java/example/exception/MultipleHandlersTestCase.java @@ -21,7 +21,7 @@ // @formatter:off // tag::user_guide[] // Register handlers for @Test, @BeforeEach, @AfterEach as well as @BeforeAll and @AfterAll -@ExtendWith({ThirdExecutedHandler.class}) +@ExtendWith(ThirdExecutedHandler.class) class MultipleHandlersTestCase { // Register handlers for @Test, @BeforeEach, @AfterEach only @@ -56,5 +56,7 @@ public void handleBeforeAllMethodExecutionException(ExtensionContext context, Th throw ex; } } + // tag::user_guide[] } +// end::user_guide[] // @formatter:on diff --git a/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java b/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java index 00246333d00f..1e4cc7bf0082 100644 --- a/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java +++ b/documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java @@ -49,5 +49,7 @@ public void handleAfterAllMethodExecutionException(ExtensionContext context, Thr private void memoryDumpForFurtherInvestigation(String error) { } + // tag::user_guide[] } +// end::user_guide[] // @formatter:on