V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git00ll
V2EX  ›  数据库

内存数据库 h2 与 mysql 兼容性太差了,能把 PostgreSQL 整成单测环境启动吗

  •  
  •   git00ll · 1 天前 · 1294 次点击

    java 单元测试,求教。 或者有其他更好的适用于 java 单测的数据库推荐吗

    第 1 条附言  ·  13 小时 29 分钟前
    说错了各位佬,是想说 MariaDB 。

    我写单测确实遇到 h2 的兼容性问题很烦。
    比如说 ddl 不兼容,导致建表语句要做修改才能在 h2 中运行。
    一些语句中的函数不支持,比如 date_add 之类的。
    h2 的驱动和 mysql 驱动表现不一致,导致 sharding jdbc 中报错。
    13 条回复    2025-10-24 14:16:24 +08:00
    SethShi
        1
    SethShi  
       1 天前
    1. 使用 SQLite 内存驱动
    2. 启动一个 MySQL dev container 来测试
    3. PostgreSQL 可以
    shiny
        2
    shiny  
       1 天前 via iPhone
    了解下 pglite
    iseki
        3
    iseki  
       16 小时 22 分钟前 via Android
    可以放弃在单测中测试数据库……这真的没有必要。至于 H2 ,H2 虽然说自己兼容 PostgreSQL 但实测还是有很多问题,读了下代码,发现架构不一样,不太好修。
    liyafe1997
        4
    liyafe1997  
       16 小时 2 分钟前
    我的单元测试环境是 docker-compose 直接在 tmpfs 中启动一个 PostgreSQL 实例,效果挺好的
    liyafe1997
        5
    liyafe1997  
       16 小时 0 分钟前
    供你参考:
    services:
    test-db:
    image: postgres:15
    container_name: test-db-postgres
    environment:
    - POSTGRES_USER=admin
    - POSTGRES_PASSWORD=password
    - POSTGRES_DB=postgres
    tmpfs:
    - /var/lib/postgresql/data
    networks:
    - test-network
    carrotliang
        6
    carrotliang  
       15 小时 52 分钟前
    从不单元测试
    powersee
        7
    powersee  
       15 小时 39 分钟前 via iPhone
    关键词:java Testcontainer junit
    dddd1919
        8
    dddd1919  
       15 小时 33 分钟前
    没看懂你的问题,是单测用 H2 替换 mysql 兼容性差,想要用 PG 做单测?那 PG 和 mysql 兼容性也很差啊,自用 H2 在单测替代 mysql 倒没遇到问题
    dragondove
        9
    dragondove  
       15 小时 27 分钟前
    你真要的话有 Embedded Postgres ,可以当作测试依赖使用。不过我建议对于数据库直接 mock 使用
    Vaspike
        10
    Vaspike  
       15 小时 21 分钟前
    pg 和 mysql 的语法也是有差别的, pg 的 group by 是很严格的
    kur0d3s
        11
    kur0d3s  
       13 小时 11 分钟前
    Ketteiron
        12
    Ketteiron  
       12 小时 21 分钟前
    对 orm 单测是应该的,数据库单测是做什么,不应该在集成测试里做吗。
    suiterchik
        13
    suiterchik  
       10 小时 11 分钟前
    如果你不想引入 docker ,那么可以考虑 MariaDB4j ,这个就是嵌入式 mariaDB ,专用于单元测试;

    如果你允许使用 docker (比如你是在 github action 等持续集成环境下),那么你可以直接添加一个 maria 容器;或者使用前面楼提到的 testcontainers
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:27 · PVG 00:27 · LAX 09:27 · JFK 12:27
    ♥ Do have faith in what you're doing.