将 junit 侦听器添加到 SpringJUnit4ClassRunner
Add a junit listener to a SpringJUnit4ClassRunner
我有一个单元测试 运行 与 SpringJUnit4ClassRunner 如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
我有一个在单元测试中使用的嵌入式数据库,我想在所有测试完成后关闭它 运行。我知道在单元测试中嵌入数据库不是 usual/good 实践,但在这种特殊情况下,这非常有用。
@AfterClass 不是一个选项,因为它必须是静态的并且我的数据库实例是由 spring 注入的。无法注入静态成员。
我如何通过侦听器或任何其他方式做到这一点?
谢谢。
您可以使用@TestExecutionListeners。
像这样:
public class ShutdownExecutionListener extends AbstractTestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throwsException {
}
@Override
public void afterTestClass(TestContext testContext) throws Exception{
EmbeddedMysqlDatabase mysqlDB=
(EmbeddedMysqlDatabase)testContext.getApplicationContext().getBean(mysqlDB);
mysqlDB.shutdown();
}
}
在你的测试中:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = ShutdownExecutionListener.class)
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
效果很好,但不要忘记设置 "mergeMode"
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = {ShutdownExecutionListener.class},
mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
我有一个单元测试 运行 与 SpringJUnit4ClassRunner 如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
我有一个在单元测试中使用的嵌入式数据库,我想在所有测试完成后关闭它 运行。我知道在单元测试中嵌入数据库不是 usual/good 实践,但在这种特殊情况下,这非常有用。
@AfterClass 不是一个选项,因为它必须是静态的并且我的数据库实例是由 spring 注入的。无法注入静态成员。
我如何通过侦听器或任何其他方式做到这一点?
谢谢。
您可以使用@TestExecutionListeners。 像这样:
public class ShutdownExecutionListener extends AbstractTestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throwsException {
}
@Override
public void afterTestClass(TestContext testContext) throws Exception{
EmbeddedMysqlDatabase mysqlDB=
(EmbeddedMysqlDatabase)testContext.getApplicationContext().getBean(mysqlDB);
mysqlDB.shutdown();
}
}
在你的测试中:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = ShutdownExecutionListener.class)
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
效果很好,但不要忘记设置 "mergeMode"
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
@TestExecutionListeners(listeners = {ShutdownExecutionListener.class},
mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}