栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

H2 postgresql模式似乎不适合我

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

H2 postgresql模式似乎不适合我

所以我想通过考虑所有postgres查询都可以在H2上使用H2 PosgreSQL兼容模式,如果我错了请指正我

恐怕那不是真的。

H2尝试模仿PostgreSQL语法并支持一些功能和扩展。它永远不会完全适合PostgreSQL的行为,并且不支持所有功能。

您唯一的选择是:

  • 在测试中使用PostgreSQL;要么
  • 停止使用H2不支持的功能

我建议使用Pg进行测试。编写一个测试工具,它是initdb的一个postgres实例,并启动它进行测试,然后将其拆解,这相对简单。

根据评论更新:

在“单元”测试和“集成”测试之间没有界限。在这种情况下,H2也是一个外部组件。纯粹的单元测试将有一个虚拟的响应者作为测试工具的一部分。针对H2的测试与针对PostgreSQL的测试一样是“集成”测试。它在进程内和内存中的事实很方便,但在功能上并不重要。

如果要进行 单元测试 ,则应为应用程序编写另一个数据库目标,以与“ PostgreSQL”,“ SybaseIQ”等目标一起使用。称它为“MockDatabase”。这应该只返回查询的预期结果。它并没有真正运行查询,仅存在于测试其余代码的行为。

就个人而言,我认为这是浪费时间,但这是单元测试纯粹主义者将要做的,以避免将外部依赖项引入测试工具。

如果您坚持要对DB组件进行单元(而不是集成)测试,但不能/不会编写模拟接口,则必须找到一种使用现有接口的方法。H2将是一个合理的选择-但是您必须编写一个新的后端,并使用一组适用于H2的新查询,您不能仅仅重复使用PostgreSQL后端。正如我们已经建立的那样,H2不支持您需要与PostgreSQL一起使用的所有功能,因此您将不得不找到不同的方法来对H2进行相同的操作。一种选择是创建一个具有“预期”结果和返回这些结果的简单查询的简单H2数据库,而完全忽略实际应用程序的架构。唯一真正的缺点是维护可能会非常麻烦……但这就是单元测试。

就个人而言,我只需要使用PostgreSQL进行测试。除非我要测试单独的类或模块,这些类或模块单独作为狭窄接口的定义明确的单元进行测试,否则我不在乎有人将其称为“单元”测试还是“集成”测试。我将对数据验证类进行单元测试。对于数据库接口代码,纯粹的单元测试意义不大,我将进行集成测试。

尽管拥有一个进程内内存数据库很方便,但这不是必需的。您可以编写测试工具,使安装代码成为

initdb
新的PostgreSQL并启动它。然后拆卸代码将杀死邮局主管并删除datadir。我在此答案中写了更多有关此的内容。

至于:

如果所有具有预期最终数据集的查询在Postgress中都可以正常工作,我可以假定它在所有其他数据库中都可以正常工作

如果我理解正确的话,那就是-如果 _其余代码_可用于PostgreSQL的数据集,则通常应与包含来自另一个数据库的相同数据的数据集相同。当然,只要使用简单的数据类型,而不使用数据库特定的功能。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号