最近在我们的团队中提出了一个问题,如果使用 h2db 进行集成测试是一种不好的做法/应该避免生产环境依赖于不同的数据库引擎,在我们的例子中是 MySQL8。
我不确定我是否同意这一点,考虑到我们的后端使用的是 spring boot/hibernate。
我做了一些阅读,发现这篇文章https://phauer.com/2017/dont-use-in-memory-databases-tests-h2/基本上说明了以下内容(以及更多内容):
TL;博士
使用内存数据库进行测试会降低测试的可靠性和范围。尽管基于 h2 的测试是绿色的,但您的应用程序的 SQL 可能会在生产环境中针对真实数据库失败。
它们提供的功能与真实数据库不同。可能的后果是:
- 您更改应用程序的 SQL 代码只是为了让它在真实数据库和内存数据库中运行。这可能会导致不太有效、优雅、准确或可维护的实现。或者你根本无法做某些事情。
- 您完全跳过了某些功能的测试。
据我所知,对于一个带有一些业务逻辑的简单 CRUD 应用程序,所有这些点都与我无关(本文中还有更多内容),因为 hibernate 封装了所有 SQL,并且代码中没有原生 SQL。
是否有任何我忽略或没有考虑过反对 h2db 的观点?是否有关于使用内存数据库与 spring boot/hibernate 进行集成测试的“最佳实践”?