3

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

谢谢

4

2 回答 2

1

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

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

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

有一些方法可以单独配置 H2(查看H2 的事务隔离级别),但是我还没有测试 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 重新尝试连接时,模式就会被清除)。我不得不退回到基于文件的数据库(这对我来说不是什么大问题)。

于 2015-01-26T07:46:05.643 回答
0

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

于 2013-06-10T18:57:29.720 回答