Mockito和jdbc程序调用

use*_*522 1 junit jdbc mockito

我正在尝试使用mockito编写一些jdbc过程调用的单元测试.这是我第一次用模拟对象(mockito)编写测试.

我试图测试的方法看起来像这样......

 public void deleteData(final Connection connection, final AnObject ) {
     CallableStatement statement = null;

     statement = connection.prepareCall("{call DEL_DATA(?)}");
     statement.setInt(1, object.getId());

     statement.executeUpdate();

     connection.commit();

     DatabaseSql.close(statement);
}
Run Code Online (Sandbox Code Playgroud)

如何使用mockito和junit测试这样的方法?

提前致谢.

Daw*_*ica 6

像这样的方法实际上不是单元测试的候选者,因为它的整个目的是与数据库进行交互.也许你想测试你正确地与数据库交互.这将是一个有效的测试,但要做到这一点,需要涉及一个数据库.

基本上,我们现在谈的是集成测试,而不是单元测试.虽然JUnit当然会这么做,但我看不出Mockito对你有很大的帮助.

在过去,我测试这样的代码的方式是使用轻量级的内存数据库.其中有一些,但我推荐的是H2(h2database.com).一旦你的路径中有H2罐,这个速度相当快且易于使用.

您可能希望集成测试执行以下操作.

  1. 创建一个虚拟表来记录过程调用,
  2. 创建一个虚拟的DEL_DATA过程,该过程除了记录在虚拟表中调用的参数外什么都不做
  3. 运行该方法
  4. 从虚拟表中选择,以验证是否正确调用了该过程.

使用H2,您可以在"内存"模式下运行此类测试,这意味着在每次测试结束时无需任何清理步骤.