【发布时间】:2023-03-27 14:57:01
【问题描述】:
我有一个使用 SpringJUnit4ClassRunner 运行的单元测试,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
我有一个在单元测试中使用的嵌入式数据库,我想在所有测试运行后关闭它。我知道在单元测试中嵌入数据库不是通常/好的做法,但在这种特殊情况下,这非常有用。
@AfterClass 不是一个选项,因为它必须是静态的,并且我的数据库实例是由 spring 注入的。不能注入静态成员。
我怎样才能通过监听器或任何其他方式做到这一点?
谢谢。
【问题讨论】:
-
我认为侦听器不是一个好的选择,因为在构建工具(Gradle、Maven、Ant)和 IDE(IntelliJ、Eclipse、 ETC。)。在测试代码时,使用嵌入式数据库也为您提供了很多不错的选择(前提是您在嵌入式和运行时环境中使用相同的数据库)。
-
谢谢。那么对于清理数据库实例,您有什么建议?
-
既然是嵌入式数据库,下次创建时Spring Context被销毁或覆盖不就自动清除了吗?您想在嵌入式模式下使用哪个数据库?
-
哦,你的意思是使用像 detroy-method 这样的东西吗?
-
谢谢。我设法使用了 DB bean 的销毁方法,并且效果很好。
标签: java spring unit-testing junit