当前位置: 首页 > 面试题库 >

嵌入式H2数据库的Spring配置以进行测试

慕震博
2023-03-14
问题内容

使用嵌入式h2数据源以及JUnit(可选),用于集成测试的Spring配置看起来如何?

我第一次尝试使用SingleConnectionDataSource基本上可以成功,但是在更复杂的测试中失败了,在该测试中您需要同时进行多个连接或暂停事务。我认为基于tcp的服务器模式下的 h2 可能也能正常工作,但这可能不是内存中临时嵌入式数据库最快的通信模式。

有哪些可能性及其优势/劣势?另外,如何创建表/填充数据库?

更新:让我们指定一些对于此类测试很重要的具体要求。

  • 数据库应该是临时的并且在内存中
  • 对于速度要求,该连接可能不应该使用tcp
  • 如果我可以在调试过程中使用数据库工具检查数据库的内容,那就太好了
  • 我们必须定义一个数据源,因为我们不能在单元测试中使用应用程序服务器数据源

问题答案:

由于我不知道是否有任何工具可以检查数据库,我认为一个简单的解决方案是使用支持HSQL,H2和Derby 的Spring嵌入式数据库(3.1.x docs,current docs)。 。

使用H2,你的xml配置如下所示:

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="classpath:db-schema.sql"/>
    <jdbc:script location="classpath:db-test-data.sql"/>
</jdbc:embedded-database>

如果你更喜欢基于Java的配置,则可以实例化DataSource这样的代码(注意EmbeddedDataBase扩展了DataSource):

@Bean(destroyMethod = "shutdown")
public EmbeddedDatabase dataSource() {
    return new EmbeddedDatabaseBuilder().
            setType(EmbeddedDatabaseType.H2).
            addScript("db-schema.sql").
            addScript("db-test-data.sql").
            build();
}

数据库表由db-schema.sql脚本创建,并用db-test-data.sql脚本中的测试数据填充。

不要忘记将H2数据库驱动程序添加到你的类路径中。



 类似资料:
  • 如何配置Spring Boot应用程序,以便在运行单元测试时使用嵌入式SQL Server,从而可以执行存储过程?

  • 所以我用了这个嵌入Kafka的例子,还有这个 我对这个示例做了一点更改,并用一些数据库(如h2db)更新了kafka侦听器。 现在在我的单元测试中,当我想检查数据在数据库中是否可用时,我得到NULL。另外,我不确定如何手动检查数据库,因为h2是一个内存基础数据库。 这是更新的部分:在接收器类中 在单元测试中: 但 dt 始终为空。此外,我也无法检查数据库,因为它在测试停止后停止。有人知道如何使它可

  • 问题内容: 目前,我们使用HSQLDB作为嵌入式数据库,但是随着数据量的增长,我们将搜索内存占用更少的数据库。 Derby / JavaDB 目前无法选择,因为它在系统属性中全局存储属性。所以我们想到了h2。 当我们使用HSQLDB时,我们创建了一个Server对象,设置参数并启动它。这描述在这里(和如实施例中的类org.hsqldb.test.TestBase的给定)。 问题是:这也可以与h2数

  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 问题内容: 对于单元测试(如果需要,可将其称为集成测试),我已经在Spring配置中配置了嵌入式数据库,如下所示: 现在,从命令行运行测试时,它们可以正常工作,但是最后我得到一些错误(无害,但很烦人): 现在,包含在异常中的提示通常很好,但是如何将此属性添加到嵌入式数据源?我是否必须扩展它,手动配置它以添加此类 “高级” 功能? 问题答案: 在JDBC网址jdbc:h2:〜/ test中 指定参数