-
Notifications
You must be signed in to change notification settings - Fork 38k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add test support to record async events, with JUnit Jupiter caveat #30020
Merged
simonbasle
merged 1 commit into
spring-projects:main
from
simonbasle:29827-inheritTheadApplicationEvents
May 5, 2023
Merged
Add test support to record async events, with JUnit Jupiter caveat #30020
simonbasle
merged 1 commit into
spring-projects:main
from
simonbasle:29827-inheritTheadApplicationEvents
May 5, 2023
Conversation
This file contains 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
cc @odrotbohm draft as this should probably be slated for 6.1.0 |
085e391
to
05fe8b7
Compare
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
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
@RecordApplicationEvents
annotationworks 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 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
SpringExtension
willinvalidate a test class that is annotated (or meta-annotated, or
enclosed-annotated) with
@RecordApplicationEvents
AND@TestInstance(PER_CLASS)
AND@Execution(CONCURRENT)
.Closes gh-29827