gpt4 book ai didi

java - 将 junit 监听器添加到 SpringJUnit4ClassRunner

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:07 27 4
gpt4 key购买 nike

我有一个使用 SpringJUnit4ClassRunner 运行的单元测试,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;

...
}

我有一个在单元测试中使用的嵌入式数据库,我想在运行完所有测试后将其关闭。我知道在单元测试中嵌入数据库不是通常/好的做法,但在这种特殊情况下,这非常有用。

@AfterClass 不是一个选项,因为它必须是静态的,而且我的数据库实例是由 spring 注入(inject)的。不能注入(inject)静态成员。

我如何通过监听器或任何其他方式做到这一点?

谢谢。

最佳答案

您可以使用@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;

...
}

关于java - 将 junit 监听器添加到 SpringJUnit4ClassRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com