Introduce EnableTestScopedConstructorContext annotation for extensions by JojOatXGME · Pull Request #4032 · junit-team/junit-framework (original) (raw)
Overview
Resolve #1568.
Resolve #2970.
Resolve #3445.
This PR moves the instance creation into the execution context of the test method. This affects the following callbacks:
TestInstancePreConstructCallbackTestInstanceFactoryParameterResolver(when resolving parameters for the constructor)TestInstancePostProcessor
Assuming the test is using TestInstance.Lifecycle.PER_METHOD (the default), these callbacks will now receive the ExtensionContext for the currently executed test method. This has the following effects:
- The callbacks can now access
ExtensionContext.getTestMethod() ExtensionContext.getTestClass()andTestInstanceFactoryContext.getTestClass()are no-longer interchangeableExtensionContext.getTestClass()now returns the (nested) class of the currently executed test- Instances of
CloseableResourcewhich are added to the store will now be closed at the end of the test execution
If the test is using TestInstance.Lifecycle.PER_CLASS, the behavior is unaltered.
Not sure if the change is considered API breaking. The previous behavior was rather unintuitive and not explicitly documented. However, the example at TestInfoDemo is no-longer valid and has been changed as part of the PR. I also think there is a good chance that there are a few extensions in the wild which rely on the previous behavior, since the behavior was in place for multiple years. I would therefore like to know how I should proceed with the PR.
I hereby agree to the terms of the JUnit Contributor License Agreement.
Definition of Done
- There are no TODOs left in the code
- Method preconditions are checked and documented in the method's Javadoc
- Coding conventions (e.g. for logging) have been followed
- Change is covered by automated tests including corner cases, errors, and exception handling
- Public API has Javadoc and @API annotations
- Change is documented in the User Guide and Release Notes