如何在java中对jdbc代码进行单元测试?

ScA*_*er2 44 java database junit unit-testing jdbc

我想为一些连接到数据库的代码编写一些单元测试,运行一个或多个查询,然后处理结果.(没有实际使用数据库)

这里的另一个开发人员编写了我们自己的DataSource,Connection,Statement,PreparedStatement和ResultSet实现,它们将根据xml配置文件返回相应的对象.(我们可以使用伪数据源,只针对它返回的结果集运行测试).

我们在这里重新发明轮子吗?这样的单元测试是否已经存在?是否有其他/更好的方法来测试jdbc代码?

Tat*_*ela 30

你有几个选择:

  • 用Mock库模拟数据库,例如JMock.这样做的巨大缺点是您的查询和数据很可能根本不会被测试.
  • 使用轻量级数据库进行测试,例如HSQLDB.如果您的查询很简单,这可能是最简单的方法.
  • 为测试专用数据库.DBUnit是一个不错的选择,或者如果你使用的是Maven,你也可以使用sql-maven-plugin来正确设置和拆除数据库(注意测试之间的依赖关系).我建议使用此选项,因为它将使您最有信心查询与数据库供应商正常工作.

有时,使这些测试可配置是必要且有用的,这样只有在数据库可用时才执行这些测试.这可以通过例如构建属性来完成.


WMR*_*WMR 24

您可以将DBUnitHSQLDB一起使用,HSQLDB可以从CSV文件中读取其初始数据.

  • 你能提供任何例子吗?我正在寻找示例,但找不到任何容易遵循的示例..我正在使用maven. (2认同)

Jim*_*rne 8

我喜欢使用以下组合:

只需DBUnit和HSQLDB就可以获得相当远的成就.Unitils提供管理和重置数据库状态的最后一英里代码.它还提供了一种管理数据库模式更改的好方法,并且可以轻松使用特定的RBDMS(Oracle,DB2,SQL Server等).最后,Unitils围绕DBUnit提供了一些不错的包装器,它使API现代化并使DBUnit更加愉快.

如果你尚未检查出Unitils,你肯定应该.Unitils经常被忽视和低估.


Sun*_*nov 6

使用任何Mock框架来完成这样的任务.(JMock的,等等).

一些例子