【发布时间】:2014-04-08 13:55:06
【问题描述】:
我有一组需要弹簧上下文的测试。
为了快速执行测试,我想确保 Spring 上下文只初始化一次,然后所有测试都应该针对这个上下文运行,然后它应该关闭。
我已经尝试了以下方法:
- 使用
@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文 - 将
@RunWith(SpringJUnit4ClassRunner.class)和@TestExecutionListeners({MyTestExecutionListener.class})与手写测试执行侦听器一起使用,该侦听器初始化spring 上下文并将其注入到具体的测试类中 - 在基类中使用
@BeforeClass侦听器和静态字段来存储 spring 上下文,并使用@AfterClass进行关闭
使用这三种方法,spring 上下文似乎被初始化了不止一次,这需要很多时间。似乎 JUnit 在运行测试时会卸载类,因此有时会丢失静态字段的内容。
有没有办法确保 spring 上下文只初始化一次?
【问题讨论】:
-
使用test suite。
-
@BoristheSpider 是的,这可能是一个选项,虽然它不是我最喜欢的,因为它需要为我们编写的每个新测试额外的配置开销
-
您可以将
@RunWith、@TestExecutionListeners@ContextConfiguration注释放在您的基类上,这样只会初始化上下文一次。 -
@Jamey 那是我试过的,对我没用:-(
-
嗯,它绝对适合我。这正是我为我们的测试所做的……我想不出为什么那行不通。你用什么来运行测试?事实上,鲍里斯是正确的。我使用一个套件来运行我们的测试,所以我想这可以根据需要为我管理生命周期。 :)
标签: java spring junit4 spring-test