4

对于我正在处理的一个项目(Spring/struts 2/hibernate),我们决定使用 h2 进行单元测试,使用 MySQL 进行生产存储,并在 liquibase 中管理方案,非常标准的票价,但我们一直遇到的问题是h2 和 MySQL 在很多方面都不同,例如它们如何处理时间戳和触发器。到了我开始后悔使用 h2 的地步,因为不匹配导致的额外头痛开始超过它的好处。我的问题是,是否还有其他内存/本地文件数据库的行为更像 MySQL?显然,对于集成测试,我们仍将使用 MySQL,但能够进行单元测试而无需将 liquibase 文件变成一个巨大的 hack,也不必确保本地 MySQL 数据库正在运行。

4

3 回答 3

0

您可以使用 ram 驱动器,将测试表和数据复制到该驱动器中,然后启动配置为从该驱动器加载的 mysql,所有这些都在启动时在脚本中完成。

然后你的单元测试会跑得更快。我们将它用于开发人员工作站,挫败感下降了三个步骤。

于 2015-01-29T10:28:27.750 回答
0

我认为没有另一个内存 Java 数据库比 H2 更兼容 MySQL。如果你有很多只适用于 MySQL 的代码,那么你可能也应该使用 MySQL 进行测试。

请注意,将来切换到另一个数据库会很困难。过度依赖一种产品的功能会导致“供应商锁定”。在 MySQL 的情况下,至少您可以选择切换到MariaDB,所以这并不是那么糟糕。

于 2013-07-13T20:04:34.023 回答
0

我认为目前正确的方法是使用 MySQL 作为 Docker 映像。

创建图像后,您可以轻松地从测试中启动它,这将需要几秒钟。您的休眠将动态初始化数据库模式,然后就可以了!

唯一的问题是 CI 服务器需要安装 Docker。

于 2015-06-17T19:34:49.653 回答