我们有一堆 JUnit 测试用例(集成测试),它们在逻辑上被分组到不同的测试类中。
我们能够为每个测试类加载一次 Spring 应用程序上下文,并将其重新用于 JUnit 测试类中的所有测试用例,如 http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html 中所述
但是,我们只是想知道是否有一种方法可以为一堆 JUnit 测试类只加载一次 Spring 应用程序上下文。
FWIW,我们使用 Spring 3.0.5、JUnit 4.5 并使用 Maven 构建项目。
最佳答案
是的,这是完全可能的。您所要做的就是在您的测试类中使用相同的 locations
属性:
@ContextConfiguration(locations = "classpath:test-context.xml")
Spring 通过 locations
属性缓存应用程序上下文,因此如果相同的 locations
第二次出现,Spring 将使用相同的上下文而不是创建新的上下文。
我写了一篇关于这个功能的文章:Speeding up Spring integration tests .在 Spring 文档中也有详细描述:9.3.2.1 Context management and caching .
这有一个有趣的含义。因为 Spring 不知道 JUnit 何时完成,它会缓存所有上下文 forever 并使用 JVM 关闭 Hook 关闭它们。这种行为(尤其是当您有很多具有不同 locations
的测试类时)可能会导致过多的内存使用、内存泄漏等。缓存上下文的另一个优点。
关于spring - 跨junit测试类重用spring应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501975/