spring - 跨junit测试类重用spring应用程序上下文

标签 spring junit junit4 spring-test

我们有一堆 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/

相关文章:

java - spring boot扫描并注入(inject)外部非spring bean

java - JUnit 设置测试用例

java - 如何为 SpringJUnit4ClassRunner.class 以外的类加载 @ContextConfiguration?

java - 如何在 JUnit 测试类中注入(inject)多个 EJB

junit4 - 如何编写将记录结果的自定义 Junit 运行程序

java - Spring Data JPA 在两个查询中加载一对一关系

java - JPA 实体是否存储对实体管理器的引用?

java - 我们如何使用 Criteria Query 在 Spring JPA 中查询一对多关系

java - StrutsTestCase 实现 - 编译错误

java - 升级到 jdk1.6 时 MockEJB 失败