一组单元测试类中的spring应用程序上下文

Posted

技术标签:

【中文标题】一组单元测试类中的spring应用程序上下文【英文标题】:spring application context in a set of unittest classes 【发布时间】:2017-04-10 15:27:44 【问题描述】:

我在同一个包中创建了几个单元测试类。所有这些类都只有一个测试用例,并且具有相同的注释,如下所示:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes= TestConfig.class )

当我运行这些测试用例时,我希望每个测试用例都在其自己的应用程序上下文中运行。但似乎同一个包中的所有测试用例共享一个应用程序上下文,无论是从 maven 命令行运行,还是在 Eclipse 中选择要作为 junit 运行的包。

如果我使用 TestConfig1、TestConfig2 等名称复制 TestConfig,并使用不同的 TestConfig 类注释不同的测试类,那么每个测试将在其自己的上下文实例中运行。

还有其他优雅的方法可以实现吗?

非常感谢。

【问题讨论】:

【参考方案1】:

这是 Spring 测试的默认行为。 Spring 测试默认缓存跨测试的应用程序上下文。这减少了测试执行时间。

我不知道您的用例。如果你有任何地方你正在弄脏应用程序上下文(改变由影响后续测试的弹簧管理的 bean 的状态),那么你可以使用 @DirtiesContext 注释测试方法。 Spring 测试为这些方法重新加载上下文。如何使用 DirtiesContext 参见下面的链接。

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-ctx-management-caching

仅在需要时谨慎使用此功能,因为这可能会使您的测试执行时间成倍增加。

【讨论】:

以上是关于一组单元测试类中的spring应用程序上下文的主要内容,如果未能解决你的问题,请参考以下文章

spring boot单元测试spring context重复加载问题

springboot 单元测试(如何使用基于web的单元测试?)

SpringBoot 单元测试不使用 Application 类中的 @EnableAutoConfiguration 注解

单元测试

Spring Boot maven 多模块项目——单元测试(应用上下文)

Spring Maven单元测试应用程序上下文加载错误文件