gpt4 book ai didi

java - 使用 H2 数据库对 DAO 层进行单元测试

转载 作者:行者123 更新时间:2023-11-29 13:40:06 28 4
gpt4 key购买 nike

在互联网上大量阅读之后,我发现使用像 H2 这样的内存数据库来对 DAO 层进行单元测试似乎是一个很好的做法。背后的想法是避免使用生产数据库。

很好,所以我设置了一个 H2 数据库并激活了 H2 PostgreSQL 兼容模式,因为我的生产数据库在 Postgres 上。我现在面临的问题:当我在 H2 上运行原始 SQL 查询以构建测试数据库时,H2 不接受此查询为有效:

ALTER SEQUENCE MYERP.ecriture_comptable_id_seq OWNED BY MYERP.ecriture_comptable.id;

我猜想使用 PostgreSQL 兼容模式并不能保证所有 Postgres 特定语法都会被 H2 接受。并且其他数据库(例如 MySQL)可能也会发生这种情况。

那么在这种情况下使用 h2 数据库有什么意义呢?我错过了什么吗?

最佳答案

单元测试应该专注于测试一个单元。 PostgreSQL 在您的应用程序外部,因此通常不是使用它的任何 DAO 的一部分:不应编写使用任何此类外部数据库的“单元测试”。

使用数据库进行集成测试可能没问题,但正如您已经注意到的那样,当您使用不同的数据库执行集成测试时可能会出现多个问题(我知道很少有应用程序只使用 ANSI-SQL 而没有任何触发器或其他供应商特定的 SQL 扩展,例如 PostgreSQL 案例中的 UPSERT 或您帖子中的 SQL)。

如果您的生产基地也在内存中怎么办?这非常困难,我认为集成测试会很好,只是不要称之为单元测试。所有这些只是突出了在您的数据库中执行业务逻辑(例如,通过您现在无法测试的触发器)或使用供应商特定的 sql 的痛点,这些供应商特定的 sql 具有几个优势,但在更改基础数据库供应商时效果不佳。

关于java - 使用 H2 数据库对 DAO 层进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56891415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com