如何仅使用 TestPropertySource 加载数据库一次并在多个测试 类 中使用它?

How can I load a database with TestPropertySource only once and use it across multiple test classes?

我有一个测试 class,它使用 @TestPropertySource 加载 hsqldb

基本上,测试文件已经变得相当大了,我想把它分解一下。问题是加载数据库需要……一些时间。不是太多,但我不想创建多个测试文件,每个文件都会加载数据库。

我的代码如下所示:

@TestPropertySource(properties = {
        "hsqldb.name=SettingsTest"
})
@ContextConfiguration(classes = { settings.config.Config.class }, loader = AnnotationConfigContextLoader.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
public class SvcTest
.
.
.

这将运行 加载数据库的一些函数。据我了解,一旦测试文件完成所有测试,它将停止数据库。我怎样才能保持它 运行ning 以便其他文件可以使用数据库,并且只有在完成后才关闭它?

尝试在测试 类 之间缓存应用程序上下文,同时使用 @DirtiesContext 将测试标记为 "dirty" 有点矛盾:

DirtiesContext: Test annotation which indicates that the ApplicationContext associated with a test is dirty and should therefore be closed and removed from the context cache.

如果您仅使用注释来重置数据库状态,则可以创建一个 ClassRule 来手动重置数据库中的测试数据,而不是拆除并重建完整的应用程序上下文。

此外,如果测试集中在应用程序的存储库部分,Spring 提供 test slicing。测试切片加载应用程序上下文的一小部分,从而减少加载时间。一个例子是 @JdbcTest 注释,用于 JDBC 专注于基于 JDBC 的组件的测试。