@@ -4584,6 +4584,52 @@ context. Note that support for the `@DirtiesContext` annotation is provided by t
4584
4584
`DirtiesContextBeforeModesTestExecutionListener` and the
4585
4585
`DirtiesContextTestExecutionListener`, which are enabled by default.
4586
4586
4587
+ .ApplicationContext lifecycle and console logging
4588
+ [NOTE]
4589
+ ====
4590
+ When you need to debug a test executed with the Spring TestContext Framework, it can be
4591
+ useful to analyze the console output (that is, output to the `SYSOUT` and `SYSERR`
4592
+ streams). Some build tools and IDEs are able to associate console output with a given
4593
+ test; however, some console output cannot be easily associated with a given test.
4594
+
4595
+ With regard to console logging triggered by the Spring Framework itself or by components
4596
+ registered in the `ApplicationContext`, it is important to understand the lifecycle of an
4597
+ `ApplicationContext` that has been loaded by the Spring TestContext Framework within a
4598
+ test suite.
4599
+
4600
+ The `ApplicationContext` for a test is typically loaded when an instance of the test
4601
+ class is being prepared -- for example, to perform dependency injection into `@Autowired`
4602
+ fields of the test instance. This means that any console logging triggered during the
4603
+ initialization of the `ApplicationContext` typically cannot be associated with an
4604
+ individual test method. However, if the context is closed immediately before the
4605
+ execution of a test method according to <<spring-testing-annotation-dirtiescontext>>
4606
+ semantics, a new instance of the context will be loaded just prior to execution of the
4607
+ test method. In the latter scenario, an IDE or build tool may potentially associate
4608
+ console logging with the individual test method.
4609
+
4610
+ The `ApplicationContext` for a test can be closed via one of the following scenarios.
4611
+
4612
+ * The context is closed according to `@DirtiesContext` semantics.
4613
+ * The context is closed because it has been automatically evicted from the cache
4614
+ according to the LRU eviction policy.
4615
+ * The context is closed via a JVM shutdown hook when the JVM for the test suite
4616
+ terminates.
4617
+
4618
+ If the context is closed according to `@DirtiesContext` semantics after a particular test
4619
+ method, an IDE or build tool may potentially associate console logging with the
4620
+ individual test method. If the context is closed according to `@DirtiesContext` semantics
4621
+ after a test class, any console logging triggered during the shutdown of the
4622
+ `ApplicationContext` cannot be associated with an individual test method. Similarly, any
4623
+ console logging triggered during the shutdown phase via a JVM shutdown hook cannot be
4624
+ associated with an individual test method.
4625
+
4626
+ When a Spring `ApplicationContext` is closed via a JVM shutdown hook, callbacks executed
4627
+ during the shutdown phase are executed on a thread named `SpringContextShutdownHook`. So,
4628
+ if you wish to disable console logging triggered when the `ApplicationContext` is closed
4629
+ via a JVM shutdown hook, you may be able to register a custom filter with your logging
4630
+ framework that allows you to ignore any logging initiated by that thread.
4631
+ ====
4632
+
4587
4633
[[testcontext-ctx-management-ctx-hierarchies]]
4588
4634
===== Context Hierarchies
4589
4635
0 commit comments