使用 Spring Data 仓库填写测试数据

我想问一下是否可以使用应用程序存储库(基于Spring Data)来填写测试数据。我知道我可以将 sql 文件与数据一起使用,但有时我需要更动态的东西。我发现编写 sql 或数据集定义很麻烦(并且在架构更改的情况下难以维护)。使用应用程序存储库有什么问题吗?那里已经有所有基本的 CRUD 操作。请注意,我们特别在谈论集成测试。

我觉得使用应用程序的一部分来测试自己有点奇怪。也许我可以创建另一组用于测试上下文的存储库。


呼唤远方
浏览 150回答 2
2回答

暮色呼如

不,使用 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  }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java