2014-02-19 94 views
0

我试图找到一种方法,单元测试我的MySQL相关的代码。我知道我希望如何工作,但无法找到适合我的解决方案。我研究过DBUnit,但看起来(如果我没有弄错),这将需要一个运行的数据库,并且只是帮助单元测试。我想要一些方法来避免在测试时运行mysql数据库。什么工作将会是某种实际将数据存储在内存中的MySQL欺骗驱动程序,而不需要访问真正的持久数据库。数据库单元测试(MySQL的)

在我的代码是硬编码访问MySQL数据库,所以我不能只是注入一些模仿的对象。我想它的工作方式是,当我的代码调用:

DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password); 

它实际上获取可以通过行家或在Maven测试的设置来配置一些其他本地数据库。我研究了基于内存的数据库,如HSQLDB,但无法找到一种方式来欺骗MySQL驱动程序。

有没有提供什么,我期待的任何工具?你有任何测试MySQL相关代码的好方法吗?

+0

http://stackoverflow.com/questions/10692398/how-do-i-make-a-mysql-database-run-completely-in-memory 当单元测试记住首先填充数据库之前启动主程序。 – Tschallacka

+0

我不知道如何在没有运行实际的mysql服务器的情况下使用它。但是这个想法确实让我想到了在单元测试期间运行嵌入式mysql服务器。 – flungo

回答

1

我有几个项目中,我不得不这样做集成测试对正在运行的MySQL服务器。我没有花时间每次都设置它,而是开发了一个library,每次运行测试时都会设置一个本地运行的MySQL实例。

随着你得到的是就像真实的东西(因为它是)一个测试数据库,而无需设置。

DBUnit的也是一个不错的选择,如果你想嘲笑数据库集成(据我所知,目前还没有必要为一个真正的MySQL服务器使用DBUnit的时候)。

+0

我想我最终将使用MySQL嵌入版本的类似方法作为测试依赖项的一部分。我做了一个名为MyUnit的项目,它在扩展时会在测试之前和之后实例化和销毁MySQL数据库。 DBUnit看起来很感兴趣,所以也会看看这个。在我正在进行的一个项目中,对此的需求实际上又出现了,所以我会再次看看这些选项。 – flungo

+0

请参阅http://stackoverflow.com/a/19279391/416300。这家伙写了一个Maven插件,在测试之前和之后开始和停止MySQL DB。 – summerbulb

+0

这是正确的,它可以在开发Java应用程序时使用。 – StumpDK