Bas*_*igt 1 java spring spring-test junit4
我有一组基于Spring的测试。
为了快速执行测试,我想确保Spring上下文仅初始化一次,然后所有测试都应针对该上下文运行,然后将其关闭。
我已经尝试了以下方法:
@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文@RunWith(SpringJUnit4ClassRunner.class)和@TestExecutionListeners({MyTestExecutionListener.class})与手写测试执行侦听器一起使用,该侦听器将初始化spring上下文并将其注入到具体的测试类中@BeforeClass在基类和静态字段中使用侦听器来存储spring上下文,以及@AfterClass用于关闭的使用这三种方法,spring上下文似乎不止一次被初始化,这需要很多时间。看起来JUnit在运行测试时会卸载类,因此有时会丢失静态字段的内容。
有没有办法确保spring上下文仅初始化一次?
为了快速执行测试,我想确保Spring上下文仅初始化一次,然后所有测试都应针对该上下文运行,然后将其关闭。
我不想问明显的问题,但是...
具体来说,这些部分说明了发生了什么:
如此,TestContext框架当然支持在测试套件中跨测试进行缓存,我应该知道,因为我编写了它。;)
现在,关于为什么缓存对您不起作用的原因,我只能假定您已将构建框架配置为针对每个测试派生(或者您正在IDE中单独并手动运行测试)。这是上面最后一个链接的摘录,可能会对您有所帮助:
测试套件和分叉过程
Spring TestContext框架将应用程序上下文存储在静态缓存中。这意味着上下文实际上是存储在静态变量中的。换句话说,如果测试在单独的进程中执行,则将在每次测试执行之间清除静态缓存,这将有效地禁用缓存机制。
为了从缓存机制中受益,所有测试必须在同一进程或测试套件中运行。这可以通过在IDE中以组的形式执行所有测试来实现。同样,在使用Ant,Maven或Gradle之类的构建框架执行测试时,重要的是要确保构建框架不会在测试之间分叉。例如,如果将Maven Surefire插件的forkMode设置为always或pertest,则TestContext框架将无法在测试类之间缓存应用程序上下文,结果,构建过程将运行得很慢。
如果您在考虑上述因素后仍然遇到问题,请考虑提交一个项目来证明您的问题。
干杯,
山姆
| 归档时间: |
|
| 查看次数: |
6591 次 |
| 最近记录: |