【问题标题】:Hibernate spring unit testing with mySQL in memory database在内存数据库中使用 mySQL 进行休眠弹簧单元测试
【发布时间】:2013-06-07 14:26:26
【问题描述】:

我刚刚看到一篇文章,我们可以使用 HSQLDB 来执行此操作,但我正在考虑在内存数据库中使用 mySQL 测试我的 DAO,因为行为因数据库而异。谁能告诉我怎么做?

谢谢

【问题讨论】:

    标签: mysql spring hibernate dao in-memory-database


    【解决方案1】:

    我使用 H2 进行单元/集成测试以及开发 - 速度更快,不依赖于任何外部。 MySQL 是我的生产数据库。这就像一场完美的婚姻......

    ...直到并发开始,数据库开始表现不同。

    每个数据库都有自己的事务隔离策略 - 大多数情况下,测试在 MySQL 上工作,但在 H2 上不工作。例如,H2 仅支持超时时间仅为 1,000 毫秒的表锁定,从而导致一些线程失败,因此我的测试不稳定。

    有一些方法可以单独配置 H2(查看 H2's transaction isolation levels),但是我还没有测试 MVCC 选项。

    我会及时通知你的。

    PS。故事的寓意 - 创建并发集成测试


    更新:它有效!我创建了如下数据源:

    final DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setDriverClassName("org.h2.Driver");
    ds.setUrl("jdbc:h2:~/testdb;MVCC=TRUE");
    ds.setUsername("sa");
    ds.setPassword("sa");       
    return ds;
    

    MVCC 标志就像一个魅力,但是我在使用内存中 h2:mem 时遇到了一些问题,因为它在每个连接中都是易失的(因此,每当 Hibernate 重新尝试连接时,模式就会被清除)。我不得不退回到基于文件的数据库(这对我来说不是什么大问题)。

    【讨论】:

      【解决方案2】:

      Spring 仅支持 H2、HSQL 和 Derby 作为内存数据库实现。如果您真的对使用 MySql 本身进行测试感兴趣,您应该能够针对外部 MySql 数据库服务器运行单元测试,在本地或不同的机器上运行。

      【讨论】:

      • 谢谢Dries..我想我会坚持使用H2数据库,因为我有一个例子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      相关资源
      最近更新 更多