不,使用 Spring Data 存储库创建测试数据绝对没有错。我什至更喜欢这样,因为它通常允许更简单的重构。与在测试中使用 JPA 一样,您需要记住 JPA 实现是后写缓存。您可能希望EntityManager在设置测试数据后刷新和清除数据,这样您就不会从第一级缓存中获得真正应该来自数据库的任何内容。此外,这可确保数据实际写入数据库,并且会出现问题。您可能对几篇关于使用 Hibernate 进行测试的文章感兴趣。他们不使用 Spring Data,但它可以与 Spring Data JPA 一起使用。
我建议Flyway用于设置您的数据库并使用Flyway 测试扩展进行集成测试。这样你就可以做这样的事情:@ContextConfiguration(locations = {"/context/simple_applicationContext.xml"})@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, FlywayTestExecutionListener.class})@Test@FlywayTest(locationsForMigrate = {"loadmsql"}) // execution once per classpublic class MethodTest extends AbstractTestNGSpringContextTests { @BeforeClass @FlywayTest(locationsForMigrate = {"loadmsql"}) // execution once per class public static void beforeClass() { // maybe some additional things } @BeforeMethod @FlywayTest(locationsForMigrate = {"loadmsql"}) // execution before each test method public void beforeMethod() { // maybe before every test method } @Test @FlywayTest(locationsForMigrate = {"loadmsql"}) // as method annotation public void simpleCountWithoutAny() { // or just with an annotation above the test method where you need it }