mirror of
https://github.com/spring-projects/spring-framework
synced 2026-06-08 17:33:33 +00:00
41ae13df5d
As of Spring Framework 6.2.13, we support JUnit Jupiter 5.12's ExtensionContextScope.TEST_METHOD behavior in the SpringExtension and the BeanOverrideTestExecutionListener; however, users can only benefit from that if they explicitly set the following configuration parameter for their entire test suite, which may have adverse effects on other third-party JUnit Jupiter extensions. junit.jupiter.extensions.testinstantiation.extensioncontextscope.default=test_method For Spring Framework 7.0, in order to support dependency injection into test class constructors and fields in @Nested test class hierarchies from the same ApplicationContext that is already used to perform dependency injection into lifecycle and test methods (@BeforeEach, @AfterEach, @Test, etc.), we have decided to configure the SpringExtension to use ExtensionContextScope.TEST_METHOD by default. In addition, we have decided to provide a mechanism for users to switch back to the legacy "test-class scoped ExtensionContext" behavior in case third-party TestExecutionListener implementations are not yet compatible with test-method scoped ExtensionContext and TestContext semantics. This commit achieves the above goals as follows. - A new @SpringExtensionConfig annotation has been introduced, which allows developers to configure the effective ExtensionContext scope used by the SpringExtension. - The SpringExtension now overrides getTestInstantiationExtensionContextScope() to return ExtensionContextScope.TEST_METHOD. - The postProcessTestInstance() and resolveParameter() methods in the SpringExtension now find the properly scoped ExtensionContext for the supplied test class, based on whether the @Nested test class hierarchy is annotated with @SpringExtensionConfig(useTestClassScopedExtensionContext = true). See gh-35680 See gh-35716 Closes gh-35697