数据库单元测试(MySQL)
Posted
技术标签:
【中文标题】数据库单元测试(MySQL)【英文标题】:Database unit testing (MySQL) 【发布时间】:2014-02-19 12:02:48 【问题描述】:我正在尝试找到一种方法来对我的 mysql 相关代码进行单元测试。我知道我希望它如何工作,但找不到适合我的解决方案。我已经研究过 DBUnit,但似乎(如果我没记错的话)这需要一个正在运行的数据库,并且只是有助于单元测试方面的事情。我想要一些方法来避免在测试时运行 mysql 数据库。最有效的是某种 MySQL 欺骗驱动程序,它将数据实际存储在内存中,而不是需要访问真正的持久数据库。
在我的代码中,访问 MySQL 数据库是硬编码的,所以我不能只注入一些模拟对象。我希望它的工作方式是当我的代码调用时:
DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password);
它实际上得到了一些其他的本地数据库,可以通过 maven 或在 maven 测试的 setUp 中进行配置。我研究过基于内存的数据库,例如 HSQLDB,但找不到欺骗 MySQL 驱动程序的方法。
是否有任何工具可以提供我正在寻找的东西?有什么好的方法可以测试 MySQL 依赖的代码吗?
【问题讨论】:
***.com/questions/10692398/… 单元测试时记得在启动主程序之前先填充数据库。 我不确定在没有实际运行 mysql 服务器的情况下如何使用它。然而,这个想法确实让我想到了在我的单元测试期间运行一个嵌入式 mysql 服务器。 【参考方案1】:我有几个项目必须针对正在运行的 MySql 服务器进行集成测试。我没有每次都花时间设置它,而是开发了一个library,它会在您每次运行测试时设置一个本地运行的 MySQL 实例。
这样您就可以得到一个测试数据库,它就像真实的东西一样(因为它是真实的),而无需设置它。
如果您想模拟数据库集成,DBUnit 也是一个不错的选择(据我所知,使用 DBUnit 时不需要真正的 MySql 服务器)。
【讨论】:
我想我最终采用了类似的方法,使用 MySQL 嵌入式版本作为测试依赖项的一部分。我做了一个名为 MyUnit 的项目,当扩展时,它会在测试前后实例化和销毁 MySQL 数据库。 DBUnit 看起来很有趣,所以也会看一下。我正在从事的一个项目实际上再次出现了这种需求,因此我将再次查看这些选项。 见***.com/a/19279391/416300。这家伙写了一个 Maven 插件来在他的测试前后启动和停止一个 MySQL DB。 没错,开发Java应用时可以使用。以上是关于数据库单元测试(MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何为使用两个数据库(mysql和mongo)的django项目编写单元测试
在 Laravel 中使用 MySQL 数据库连接运行多个单元测试时出错
出于单元测试的目的,哪个内存 Java 数据库最接近 MySQL 和 SqlServer?
使用Junit单元测试及操作MySQL数据库时出现错误及解决方法