[英]SpringJUnit4ClassRunner does not close the Application Context at the end of JUnit test case
我在我的JUnit 4测试中使用SpringJUnit4ClassRunner,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
public class MyTest {
@Autowired
private ConfigurableApplicationContext context;
@Test
public void test1() {
. . .
}
@Test
public void test2() {
. . .
}
. . .
}
但是,在此测试用例结束时,应用程序上下文未关闭。 我希望在测试用例结束时关闭应用程序上下文(不是在测试用例中的每个单独测试结束时)。
到目前为止,我可以想出这个解决方法:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
public class MyTest {
@Autowired
private ConfigurableApplicationContext context;
private static ConfigurableApplicationContext lastContext;
@After
public void onTearDown() {
lastContext = context;
}
@AfterClass
public static void onClassTearDown() {
lastContext.close();
}
@Test
public void test1() {
. . .
}
@Test
public void test2() {
. . .
}
. . .
}
有更好的解决方案吗?
您可以在类级别添加@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
,并且一旦方法中的所有测试完成,上下文将关闭。 您将获得与当前代码相同的功能。
你是如何运行测试的?
默认情况下,Spring不会在测试用例关闭时关闭上下文。 相反,它安装JVM退出时运行的关闭挂钩。 引入这种模糊的机制以允许测试上下文缓存 ,这是一件好事。
根据我的经验,当从我的IDE和maven-surefire-plugin
运行JUnit测试时,这可以正常工作。 你的解决方案有点黑客,当然不应该需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.