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

rus*_*tyx 28 java junit spring

我在我的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() {
    . . .
    }
    . . .
}
Run Code Online (Sandbox Code Playgroud)

但是,在此测试用例结束时,应用程序上下文未关闭.我希望在测试用例结束时关闭应用程序上下文(不是在测试用例中的每个单独测试结束时).

到目前为止,我可以想出这个解决方法:

@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() {
    . . .
    }
    . . .
}
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?

gka*_*mal 70

您可以@DirtiesContext(classMode=ClassMode.AFTER_CLASS)在类级别添加,并且一旦方法中的所有测试完成,上下文将关闭.您将获得与当前代码相同的功能.

  • +1,我不知道这个选项,太棒了! (2认同)
  • 即使已经过了一年了:非常感谢!解决了我遇到的一个奇怪的测试问题.:-) (2认同)