[英]Add a junit listener to a SpringJUnit4ClassRunner
我有一个使用SpringJUnit4ClassRunner运行的单元测试,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
我有一个嵌入式数据库,用于单元测试,我想在运行所有测试后关闭。 我知道在单元测试中嵌入数据库不是通常的/良好实践,但在这种特殊情况下,这是非常有用的。
@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;
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.