我刚刚看到一篇文章,我们可以使用 HSQLDB 来执行此操作,但我正在考虑在内存数据库中使用 mySQL 测试我的 DAO,因为行为因数据库而异。谁能告诉我该怎么做?
谢谢
最佳答案
我将 H2 用于单元/集成测试以及开发 - 速度更快并且不依赖于任何外部。 MySQL 是我的生产数据库。这就像一场完美的婚姻......
... 直到并发开始,并且数据库开始表现不同。
每个数据库都有自己的事务隔离策略 - 大多数情况下,测试适用于 MySQL 而不是 H2。例如,H2 仅支持超时仅为 1,000 毫秒的表锁定——因此导致某些线程失败,因此我的测试不稳定。
有多种方法可以单独配置 H2(查看 H2's transaction isolation levels),但是我还没有测试 MVCC 选项。
我会及时通知你。
附言。故事的寓意 - 创建并发集成测试!
更新:有效!我创建了如下数据源:
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;
MVCcflags就像一个魅力,但是我在使用内存中 h2:mem
时遇到了一些问题,因为它在每个连接中都是易变的(因此,每当 Hibernate 重新尝试连接时,模式就会被清除).我不得不退回到基于文件的数据库(这对我来说不是什么大问题)。
关于mysql - 在内存数据库中使用 mySQL 进行 Hibernate spring 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16986513/