为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2021-11-24 16:15:50
我想问一下是否可以使用应用程序存储库(基于Spring Data)来填写测试数据。我知道我可以将 sql 文件与数据一起使用,但有时我需要更动态的东西。我发现编写 sql 或数据集定义很麻烦(并且在架构更改的情况下难以维护)。使用应用程序存储库有什么问题吗?那里已经有所有基本的 CRUD 操作。请注意,我们特别在谈论集成测试。我觉得使用应用程序的一部分来测试自己有点奇怪。也许我可以创建另一组用于测试上下文的存储库。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

不,使用 Spring Data 存储库创建测试数据绝对没有错。

我什至更喜欢这样,因为它通常允许更简单的重构。

与在测试中使用 JPA 一样,您需要记住 JPA 实现是后写缓存。您可能希望EntityManager在设置测试数据后刷新和清除数据,这样您就不会从第一级缓存中获得真正应该来自数据库的任何内容。此外,这可确保数据实际写入数据库,并且会出现问题。

您可能对几篇关于使用 Hibernate 进行测试的文章感兴趣。他们不使用 Spring Data,但它可以与 Spring Data JPA 一起使用。


查看完整回答
反对 回复 2021-11-24
?
青春有我

TA贡献1784条经验 获得超8个赞

我建议Flyway用于设置您的数据库并使用Flyway 测试扩展进行集成测试。


这样你就可以做这样的事情:


@ContextConfiguration(locations = {"/context/simple_applicationContext.xml"})

@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,

    FlywayTestExecutionListener.class})

@Test

@FlywayTest(locationsForMigrate = {"loadmsql"}) // execution once per class

public 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

  }


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信