当前位置: 首页 > 知识库问答 >
问题:

只使用H2数据库进行单元测试

淳于泓
2023-03-14

共有1个答案

井旺
2023-03-14

是的,您还应该使用H2作为内存中的数据库,因为它允许在执行测试循环阶段时足够快地创建干净的数据库、执行单元测试和删除数据库。
在每次构建时创建和删除物理数据库将占用大量时间,并且会使本地构建速度变慢。

现在,自动测试不应该只依赖于H2。
这有一些限制,与目标DBMS(PostgreSQL)相比,这可能会创建稍微不同的行为。
您还应该创建使用目标DBMS的集成测试。
通常,这些集成测试不应该在开发人员构建上自动执行,而是在持续集成环境上执行。

H2兼容性和限制:

H2提供了一些特定的数据库兼容模式(用于PostgreSQL和许多其他模式),但这些模式有多种情况。

它不完全支持ANSI SQL和特定的数据库功能:

所有数据库引擎的行为略有不同。在可能的情况下,H2支持ANSI SQL标准,并试图与其他数据库兼容。然而,仍然存在一些差异:

在MySQL中,文本列默认不区分大小写,而在H2中则区分大小写。但是,H2也支持不区分大小写的列。要创建不区分大小写文本的表,请在数据库URL后面追加ignorecase=true(例如:jdbc:h2:~/test;ignorecase=true)。

您可以在此页面上提供一些关于特定数据库模式的不详细信息:

MySQL兼容模式

...

Oracle兼容模式

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

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 问题内容: 我的单元测试使用Hibernate连接到内存中的HSQLDB数据库。我希望可以采用JUnit 方法清除并重新创建数据库(包括模式和所有数据的整个数据库)的方法。 问题答案: 您可以配置hibernate配置文件,以强制数据库每次重新创建表和架构。 hibernate.hbm2ddl.auto创建SessionFactory时,自动将模式DDL验证或导出到数据库。使用create- dr

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

  • 问题内容: 我希望在编写用于测试某些数据库条目的单元测试中获得一些建议。 如果找不到记录,则我正在测试的功能会将数据库作为种子。 我似乎不太了解如何进行len测试。我正在使用测试数据库,因此我可以在任何时候都对其进行核对,因此,如果我只需要在函数上强制使用一个空的数据库,就没有问题了。 该函数本身可以正常工作,我只想确保已覆盖该函数。 任何建议都很好。 谢谢! 问题答案: 确实取决于您,有很多方法

  • 就我所知,我认为这与@id注释的H2解释有关,但不明白为什么,所以任何帮助都将不胜感激... NB-我已经搜索堆栈溢出相当广泛,包括有关使用双引号列规范的问题,但不要认为这与我的情况有关... 表 和从SP调用返回默认结果的测试类: 测试类