I’m using SpringJUnit4ClassRunner in my JUnit 4 tests like this:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
public class MyTest {
@Autowired
private ConfigurableApplicationContext context;
@Test
public void test1() {
. . .
}
@Test
public void test2() {
. . .
}
. . .
}
However, at the end of this test case the application context is not closed.
I would like to have the application context closed at the end of the test case (NOT at the end of each individual unit-test in the test case).
So far I could come up with this work-around:
@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() {
. . .
}
. . .
}
Is there a better solution?
You can add the
@DirtiesContext(classMode=ClassMode.AFTER_CLASS)at the class level and the context will get closed once all the tests in the methods are done. You will get the same functionality as your current code.