Skip to content

BEFORE_* modes in @DirtiesContext cause context to be closed before test [SPR-13180] #17772

@spring-projects-issues

Description

@spring-projects-issues

Sam Brannen opened SPR-13180 and commented

Status Quo

#17035 introduced BEFORE_METHOD, BEFORE_EACH_TEST_METHOD, and BEFORE_CLASS modes in @DirtiesContext. In Spring Framework 4.2 RC1, the DirtiesContextTestExecutionListener was updated to support these new BEFORE_\* modes in addition to the existing AFTER_\* modes.

However, there is a problem with having DirtiesContextTestExecutionListener support BEFORE_\* modes since it is configured (by default) to execute after the DependencyInjectionTestExecutionListener. This leads to several undesired side effects:

  1. The test's ApplicationContext is closed by the DirtiesContextTestExecutionListener after dependencies have been injected into the test instance.
  2. Injected dependencies may therefore attempt to interact with an ApplicationContext that is no longer active.
  3. If a test has its ApplicationContext injected as a dependency, interaction with the context will likely fail since the context has been closed.
  4. Furthermore, any TestExecutionListeners registered after the DirtiesContextTestExecutionListener will get a new ApplicationContext if they invoke TestContext.getApplicationContext().

Deliverables

  1. Introduce a new TestExecutionListener dedicated to handling BEFORE_\* modes in @DirtiesContext.
  2. Remove the support for BEFORE_\* modes from DirtiesContextTestExecutionListener.
  3. Update all supporting code to ensure that the new TestExecutionListener is registered before the DependencyInjectionTestExecutionListener (by default).

Affects: 4.2 RC1

Issue Links:

Referenced from: commits 0aac02d

Metadata

Metadata

Assignees

Labels

in: testIssues in the test moduletype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions