在静态方法中使用 Spring 存储库来设置测试数据
Using Spring repository in static methods for setting up test data
为了为我的 Spring 启动集成测试设置测试数据,我想创建一些助手 类 和使用存储库填充数据的方法。
这是一个例子:
@Component
public class TestUtils {
private static TemplateRepository templateRepository;
@Autowired
public TestUtils(TemplateRepository templateRepository) {
TestUtils.templateRepository = templateRepository;
}
public static void createTemplates() {
Template template = Template.builder()
.content("some content")
.build();
templateRepository.save(template);
}
}
由于缺乏经验,我无法判断这种做法是否可行。将存储库注入 static
是否“安全”?或者是否有更好的方法来设置测试数据?
我使用 TestContainers 和 Flyway。
您可以制作 SQL 脚本并使用 @Sql
注释测试方法,并提供一个 .sql 文件 and/or 语句为 运行。
您可以将这些 .sql 文件存储在 test/resources 文件夹中。
在文档中有一个很好解释的初始化数据的过程。我建议你参考下面
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization
您只需在预定义的 sql 文件中维护插入语句。
不要使用 static
。如果您想使用 Java 初始化存储库中的数据,只需在您的测试中这样做即可。
如果您需要在不同的存储库中创建一些东西,您可以做的是创建一个专用组件:
@Component
public class DatabaseInitializer {
private final TemplateRepository templateRepository;
private final MyOtherRepository myOtherRepository;
// Add constructor here
public void createInitialData() {
// Use repositories to persist some data
}
@ExtendWith(SpringExtension.class)
@Import(DatabaseInitializer.class)
class MyTest {
@Autowired
private DatabaseInitializer initDb;
@Test
void myTest() {
initDb.createInitialData(); // Or put this in a `@Before..` method
// actual test here
}
}
为了为我的 Spring 启动集成测试设置测试数据,我想创建一些助手 类 和使用存储库填充数据的方法。
这是一个例子:
@Component
public class TestUtils {
private static TemplateRepository templateRepository;
@Autowired
public TestUtils(TemplateRepository templateRepository) {
TestUtils.templateRepository = templateRepository;
}
public static void createTemplates() {
Template template = Template.builder()
.content("some content")
.build();
templateRepository.save(template);
}
}
由于缺乏经验,我无法判断这种做法是否可行。将存储库注入 static
是否“安全”?或者是否有更好的方法来设置测试数据?
我使用 TestContainers 和 Flyway。
您可以制作 SQL 脚本并使用 @Sql
注释测试方法,并提供一个 .sql 文件 and/or 语句为 运行。
您可以将这些 .sql 文件存储在 test/resources 文件夹中。
在文档中有一个很好解释的初始化数据的过程。我建议你参考下面
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization
您只需在预定义的 sql 文件中维护插入语句。
不要使用 static
。如果您想使用 Java 初始化存储库中的数据,只需在您的测试中这样做即可。
如果您需要在不同的存储库中创建一些东西,您可以做的是创建一个专用组件:
@Component
public class DatabaseInitializer {
private final TemplateRepository templateRepository;
private final MyOtherRepository myOtherRepository;
// Add constructor here
public void createInitialData() {
// Use repositories to persist some data
}
@ExtendWith(SpringExtension.class)
@Import(DatabaseInitializer.class)
class MyTest {
@Autowired
private DatabaseInitializer initDb;
@Test
void myTest() {
initDb.createInitialData(); // Or put this in a `@Before..` method
// actual test here
}
}