Add test support to record async events, with JUnit Jupiter caveat#30020
Merged
simonbasle merged 1 commit intospring-projects:mainfrom May 5, 2023
Merged
Conversation
Contributor
Author
|
cc @odrotbohm draft as this should probably be slated for 6.1.0 |
085e391 to
05fe8b7
Compare
Contributor
Author
|
Now that |
This commit modifies the way the `@RecordApplicationEvents` annotation works in tests, allowing for capture of events from threads other than the main test thread (async events) and for the assertion of captured event from a separate thread (e.g. when using `Awaitility`). This is done by switching the `ApplicationEventsHolder` to use an `InheritedThreadLocal`. There is a mutual exclusion between support of asynchronous events vs support of JUnit5 parallel tests with the `@TestInstance(PER_CLASS)` mode. As a result, we favor the former and now `SpringExtension` will invalidate a test class that is annotated (or meta-annotated, or enclosed-annotated) with `@RecordApplicationEvents` AND `@TestInstance(PER_CLASS)` AND `@Execution(CONCURRENT)`. See spring-projectsgh-29827 Closes spring-projectsgh-30020
3bb0161 to
f269a80
Compare
sbrannen
added a commit
that referenced
this pull request
May 13, 2023
Prior to this commit, the SpringExtension looked up the TestInstance.Lifecycle and ExecutionMode using TestContextAnnotationUtils; however, using TestContextAnnotationUtils is problematic since the TestInstance.Lifecycle and ExecutionMode can be configured globally via configuration parameters instead of locally via the @testinstance and @execution annotations. This commit addresses these issues by looking up the TestInstance.Lifecycle and ExecutionMode via JUnit Jupiter's ExtensionContext which takes into account both global and local configuration. See gh-30020
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This commit modifies the way the
@RecordApplicationEventsannotationworks in tests, allowing for capture of events from threads other than
the main test thread (async events) and for the assertion of captured
event from a separate thread (e.g. when using
Awaitility).This is done by switching the
ApplicationEventsHolderto use anInheritedThreadLocal.There is a mutual exclusion between support of asynchronous events vs
support of JUnit5 parallel tests with the
@TestInstance(PER_CLASS)mode. As a result, we favor the former and now
SpringExtensionwillinvalidate a test class that is annotated (or meta-annotated, or
enclosed-annotated) with
@RecordApplicationEventsAND@TestInstance(PER_CLASS)AND@Execution(CONCURRENT).Closes gh-29827