java - SpringJUnit4ClassRunner 不会在 JUnit 测试用例结束时关闭 Application Context

标签 java spring junit

我在 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)在类级别,一旦方法中的所有测试完成,上下文将关闭。您将获得与当前代码相同的功能。

关于java - SpringJUnit4ClassRunner 不会在 JUnit 测试用例结束时关闭 Application Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7498202/

相关文章:

java - Selenium Cucumber 强制终止运行

java - 在 Spring boot 应用程序中传递常量消息的正确方法(messages.properties 或 Constant 类)

java - @Column 长度大于 255 个字符的实体

java - 生命周期配置未涵盖插件执行 : org. codehaus.gmaven :groovy-maven-plugin:2. 1.1

java - Spring的DataBinder是如何用来转换普通参数值的?

java - FakeRequest 类型 Promise 的结果

java - 使用 libGDX 缩放和淡化启动屏幕以使其不被拉伸(stretch)的最佳方法是什么?

Spring 启动 : NoUniqueBeanDefinitionException between test and main

java - Spring测试不将数据存储在数据库中

java - 如何测试使用企业应用程序的 EJB 模块