内存数据库 h2 与 mysql 兼容性太差了,能把 PostgreSQL 整成单测环境启动吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git00ll
V2EX    数据库

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

  •  
  •   git00ll 11 天前 1773 次点击

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

    第 1 条附言    10 天前
    说错了各位佬,是想 MariaDB 。

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

    如果你允许使用 docker (比如你是在 github action 等持续集成环境下),那么你可以直接添加一个 maria 容器;或者使用前面楼提到的 testcontainers
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5879 人线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 02:45 PVG 10:45 LAX 18:45 JFK 21:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86