首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在所有测试中只初始化一次

如何在所有测试中只初始化一次
EN

Stack Overflow用户
提问于 2014-04-08 13:55:06
回答 1查看 13.1K关注 0票数 4

我有一组测试,这些测试需要一个spring上下文。

为了快速执行测试,我想确保Spring上下文只初始化一次,然后所有的测试都应该针对这个上下文运行,然后它应该关闭。

我已经尝试过以下方法:

  1. 使用@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文
  2. 使用@RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners({MyTestExecutionListener.class})与手写的测试执行监听器一起初始化spring上下文并将其注入具体的测试类中。
  3. 在基类和静态字段中使用@BeforeClass侦听器来存储spring上下文,使用@AfterClass来关闭

使用这三种方法,spring上下文似乎被初始化了不止一次,这需要很长的时间。看来,JUnit在运行测试时卸载类,因此静态字段的内容有时会丢失。

是否有方法确保spring上下文只初始化一次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-08 17:41:48

为了快速执行测试,我想确保Spring上下文只初始化一次,然后所有的测试都应该针对这个上下文运行,然后它应该关闭。

我不想问显而易见的问题,但是.

你读过弹簧参考手册中的测试一章吗?

具体来说,这些部分解释了正在发生的事情:

  • 上下文管理和缓存
  • 上下文缓存

因此,TestContext框架当然支持在测试套件中跨测试进行缓存,我应该知道,因为我编写了它。;)

至于为什么缓存不适用于您,我只能假设您已经将构建框架配置为为每个测试分叉(或者您正在IDE中单独或手动地运行测试)。下面是上面最后一个链接的摘录,可能会对您有所帮助:

测试套件和分叉进程 Spring TestContext框架将应用程序上下文存储在静态缓存中。这意味着上下文实际上存储在静态变量中。换句话说,如果测试在单独的进程中执行,静态缓存将在每次测试执行之间被清除,这将有效地禁用缓存机制。 为了从缓存机制中获益,所有测试都必须在同一个进程或测试套件中运行。这可以通过在IDE中作为一个组执行所有测试来实现。类似地,当使用构建框架(如Ant、Maven或Gradle )执行测试时,必须确保构建框架不会在测试之间分叉。例如,如果Maven Surefire插件的forkMode设置为able或pertest,则TestContext框架将无法在测试类之间缓存应用程序上下文,因此构建过程将运行得慢得多。

如果您在考虑上述问题后仍然会遇到问题,请考虑演示您的问题的提交项目

干杯,

相同的

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22939226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档