为什么在 Spring JUnit 测试中为每个测试方法初始化和创建一个新的 ApplicationContext?

Why in Spring JUnit test a new ApplicationContext is initialized and created for each test method?

我在Spring学习单元测试,有以下疑问

为什么要为每个测试方法初始化并创建一个新的ApplicationContext?

为什么 Spring 每个测试方法都需要一个新的 ApplicationContext 而不是重复使用在执行任何方法之前创建的相同 ApplicationContext?

  • 不需要每次都创建新的ApplicationContext
  • 您所要做的就是在测试中使用相同的位置属性 类:

    @ContextConfiguration(locations = "classpath:test-context.xml")
    
  • Spring 通过位置属性缓存应用程序上下文,因此如果相同的位置第二次出现,Spring 使用相同的上下文而不是创建新的上下文。

  • 可以参考link:NoBlogDefFound: Speeding up Spring integration tests.

这取决于您如何设置测试。如果您使用 @SpringJUnit4ClassRunner@ContextConfiguration,那么 Spring 将缓存现有的 ApplicationContext 并重新使用它们。

您可以将上下文标记为脏以防止重复使用。

如果您创建自己的 ApplicationContext,则需要实施自己的 reuse/caching 策略。