Using H2 database only for Unit testing

mad*_*nce 4 postgresql unit-testing h2 spring-boot

I have a spring boot application standing on Postgres database.

Now I want to use h2 database for Unit testing alone.

这样做对吗?或者有什么建议

dav*_*xxx 7

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

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

H2 兼容性和限制

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

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

兼容性

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

在 MySQL 中,默认情况下文本列不区分大小写,而在 H2 中它们区分大小写。但是 H2 也支持不区分大小写的列。要创建不区分大小写文本的表,请将 IGNORECASE=TRUE 附加到数据库 URL(例如:jdbc:h2:~/test;IGNORECASE=TRUE)。

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

兼容模式

对于某些功能,该数据库可以模拟特定数据库的行为。但是,只有一小部分数据库之间的差异是通过这种方式实现的。以下是当前支持的模式列表以及与常规模式的区别:

DB2 兼容模式

...

MySQL兼容模式

...

Oracle 兼容模式

...

PostgreSQL 兼容模式

要使用 PostgreSQL 模式,请使用数据库 URL jdbc:h2:~/test;MODE=PostgreSQL 或 SQL 语句 SET MODE PostgreSQL。

对于别名列,ResultSetMetaData.getColumnName() 返回别名,getTableName() 返回 null。将浮点数转换为整数时,小数位不会被截断,但值会四舍五入。支持系统列 CTID 和 OID。在此模式下,LOG(x) 以 10 为底。