【发布时间】:2013-05-07 09:07:03
【问题描述】:
我有一组使用SpringJUnit4ClassRunner 运行的集成测试。我正在尝试使用 maven surefire 并行运行这些。但是,我注意到代码在进入CacheAwareContextLoaderDelegate.loadContext() 中的同步块之前就被阻塞了。
有没有办法绕过这个缓存?我试过这样做,但似乎有更多的共享状态而不仅仅是缓存本身,因为我的应用程序在 Spring 代码中死锁了。或者是否可以通过在地图键上而不是整个地图上以某种方式同步来使同步更加细粒度?
我对并行化测试的动机是双重的:
- 在某些测试中,我将 bean 替换为 mock。由于 mock 本质上是有状态的,因此我必须使用
@DirtiesContext为每个测试方法构建一个新的 ApplicationContext。 - 在其他测试中,我只想部署 Jersey 资源的一个子集。为此,我指定了 Spring 配置类的一个子集。由于 Spring 使用
MergedContextConfiguration作为上下文缓存中的键,这些测试将无法共享 ApplicationContexts。
【问题讨论】:
标签: multithreading spring integration-testing