【发布时间】:2014-08-05 02:15:26
【问题描述】:
我的应用程序访问 Postgres 数据库,并且我有许多针对 Postgres 的预定义查询(等级、分区、复杂连接等)。现在我想用小测试数据对这些查询行为进行单元测试。所以我从 H2/JUnit 开始。我发现大多数 Postgres 查询,如 Rank、Partition、Complex case when update 等。所以我想到使用 H2 PosgreSQL 兼容模式,认为所有 Postgres 查询都可以在 H2 上工作,如果我错了,请纠正我。
我按照 H2 文档说:
要使用 PostgreSQL 模式,请使用数据库 URL jdbc:h2:~/test;MODE=PostgreSQL 或 SQL 语句 SET MODE PostgreSQL。
我使用SET MODE PostgreSQL 启用了模式,并尝试触发其中一个涉及rank() 并在Postgres 中工作但在H2 中不起作用的查询。它给了我以下例外:
Function "RANK' not found; in SQL statement
请指导我是 H2 和数据库测试的新手。提前致谢。我正在使用 H2 JDBC 驱动程序来触发 Postgres 查询,因为我认为 H2 Posgress 兼容模式将允许我触发 Postgres 查询。
【问题讨论】:
-
您可能会发现阅读 cmets 到类似问题 here 会很有趣。对于它的价值,我支持那些主张如果您的应用程序实际上使用 PostgreSQL,那么您也应该简单地使用 PostgreSQL 进行测试。
-
嗨@Gord我希望我可以使用Posgres,但作为单元测试的一部分,我应该在像H2这样的内存数据库中使用。作为集成测试的一部分,我可以使用 Postgres。
-
使用数据库时,它不是单元测试...
标签: java postgresql jdbc h2