回答
我可以推荐。 H2对postgres有一种兼容模式,这使得它非常相似。我们遇到问题的唯一部分是缺乏“共同表格表达”。
我看到的最大优势是内存分贝。您可以轻松地启动每个测试的空白页面,这比使用任何硬盘支持的dbms更容易。
作为现场数据库,尤其是当您需要存储大量数据时,在我看来效率是欠缺的。我们在测试数据量较大的测试中遇到了一些性能问题,例如1000000条记录。正因为如此,你自然不能使用H2做任何有意义的索引优化。
是和你也应该使用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)。
而且你可能有些不详细信息on this page,关于具体的特定的数据库模式:
兼容模式
对于某些功能,这个数据库可以效仿的 特定数据库的行为。但是,只有数据库之间差异的一小部分以这种方式实现。这里是 目前支持的模式列表和差异为常规模式:
DB2兼容模式
...
MySQL的兼容模式
...
Oracle兼容性模式
...
PostgreSQL的兼容模式
要使用PostgreSQL的模式,使用的数据库URL JDBC:H2:〜/测试; MODE =的PostgreSQL或SQL语句SET MODE 的PostgreSQL 。
对于别名列,ResultSetMetaData.getColumnName()返回 别名,getTableName()返回null。将浮点数 转换为整数时,小数位数不会被截断,但会舍入值。支持系统列CTID和OID 。在此模式下,LOG(x)以10为基数。
- 1. 玩框架在内存中使用h2数据库进行单元测试
- 2. 使用H2数据库进行弹道测试配置文件
- 3. 使用H2数据库在Grails中进行集成测试
- 4. 使用ContentProvider和数据库进行Android单元测试
- 5. 使用Symfony 2和数据库进行单元测试
- 6. 使用JUnit进行数据库单元测试
- 7. 使用EF6进行单元测试后重建数据库
- 8. H2数据库恢复到特定状态进行测试
- 9. 清理整个数据库(用Hibernate进行单元测试)
- 10. 单元测试数据库
- 11. “单元”测试数据库
- 12. 单元测试数据库
- 13. 单元测试:当在Eclipse中运行下面的测试使用Hibernate和H2数据库
- 14. 每次运行单元测试时,我的H2数据库都在擦什么?
- 15. 仅使用变量进行单元测试
- 16. 单元测试类仅使用局部变量进行组合
- 17. 仅使用assert语句进行单元测试是否有效?
- 18. 使用单元测试和测试数据库
- 19. 如何进行单元测试而不碰到数据库
- 20. 如何对数据库迁移进行单元测试?
- 21. 如何对数据库访问逻辑进行单元测试?
- 22. 在添加休眠数据库后进行单元测试
- 23. 如何对我的数据库内容进行单元测试?
- 24. 使用QT进行单元测试
- 25. 使用docker进行单元测试
- 26. 使用Cocoapods进行Xcode单元测试
- 27. 使用JMS进行单元测试(ActiveMQ)
- 28. 使用jdeveloper进行单元测试10g
- 29. 使用moment.js进行单元测试
- 30. 使用FluentValidation进行单元测试ServiceStack
针对不同的DBMS进行测试,然后在生产中的测试几乎没有意义 –
@a_horse_with_no_name您能证明实际经验还是仅仅是一种意见?大约200000行H2测试代码(postgres live)帮助我们以非常确定的方式使我们的代码安全可维护。 – aschoerk
哪个引起了你怀疑使用h2进行测试? –