如何关闭测试之间的应用程序上下文

时间:2018-04-30 11:24:04

标签: spring-boot applicationcontext spring-boot-test

我有3组测试:单元,集成,验收。

  • 后两个小组启动ApplicationContext:最小化为“集成”,完全为“接受”。
  • 两个应用程序上下文都注册队列订阅者。
  • 在整个测试运行结束时(@RunWith(SpringRunner.class)
  • 取消注册应用程序上下文

当我运行“所有测试”时,会启动2个不同的应用程序上下文,并且我有重复的队列订阅者。

我知道此订阅者重复的以下解决方法:

  • 从不一起进行集成和验收测试
  • 使用“接受”应用程序上下文进行“集成”测试。缺点:试运行需要更长的时间。
  • 添加静态注册表并手动添加/删除侦听器。缺点:太复杂,容易忘记

在一组测试之后是否有任何方便的方法来卸载应用程序上下文?

基于 ndrone 回答

的更新
  • @DirtiesContext是完美的匹配
  • 还有一个选项是将缓存的ApplicationContexts计数限制为spring.test.context.cache.maxSize=1

使用dirties context

测试超类示例
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
    @TestExecutionListeners({FlywayTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class})
    @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
    public abstract class AcceptanceTest {}

0 个答案:

没有答案