我有一个Spring Boot应用程序站在Postgres数据库上。
现在我想单独使用h2数据库进行单元测试。
这是对的吗?或者推荐是什么
答案 0 :(得分:2)
是和您还应该使用H2作为内存数据库,因为它允许足够快地创建干净的数据库,以执行针对执行test
循环阶段时,>足够快地删除数据库
在每次构建时创建和删除物理数据库会消耗很多时间,并且会使本地构建变慢。
现在,自动测试不应仅依赖H2
这有一些限制,与目标DBMS相比可以创建略微不同的行为(PostgreSQL)。
您还应该创建使用目标DBMS的集成测试
通常,这些集成测试不应在开发人员构建上自动执行,而应在持续集成环境中执行。
H2兼容性和限制:
H2提供了一些特定的数据库兼容模式(对于PostgreSQL和许多其他模式),但这些模式有多个极端情况。
它不完全支持ANSI SQL和特定的数据库功能:
<强>兼容性强>
所有数据库引擎的行为都有所不同。在可能的情况下,H2 支持ANSI SQL标准,并尝试与其他标准兼容 数据库。但是仍然存在一些差异:
在MySQL文本列中,默认情况下不区分大小写,而在H2中 他们区分大小写。但是,H2支持不区分大小写的列 同样。要创建具有不区分大小写的文本的表,请附加 IGNORECASE = TRUE到数据库URL(例如: JDBC:H 2:〜/测试; IGNORECASE = TRUE)
关于特定的特定数据库模式,您可以获得一些未详细信息on this page:
兼容模式
对于某些功能,此数据库可以模拟其行为 特定数据库。但是,只有一小部分差异 数据库之间以这种方式实现。这是列表 当前支持的模式以及与常规模式的差异:
DB2兼容模式
...
MySQL兼容模式
...
Oracle兼容模式
...
PostgreSQL兼容模式
要使用PostgreSQL模式,请使用数据库URL jdbc:h2:〜/ test; MODE = PostgreSQL或SQL语句SET MODE 的PostgreSQL。
对于别名列,ResultSetMetaData.getColumnName()返回 别名和getTableName()返回null。转换浮动时 点数到整数,小数位不是 截断,但值是四舍五入的。系统列CTID和OID 得到支持。在此模式下,LOG(x)为10。
答案 1 :(得分:1)
我可以推荐一下。 H2对postgres有一种兼容模式,这使它非常相似。我们遇到问题的唯一部分是缺少&#34;常用的表格表达式&#34;。
我看到的最大优势是内存数据库。您可以使用空白平板轻松启动每个测试,这比使用任何硬盘支持的dbms更容易。
作为实时数据库,尤其是当您需要存储大量数据时,我认为效率不足。在数据量较大的测试中,我们遇到了一些性能问题,例如1000000条记录。因此,您自然无法使用H2进行任何有意义的索引优化。