我自己创建一个ResultSet对象

时间:2012-11-29 14:02:11

标签: java resultset

我想为类创建一个Testclass,它从数据库中读取数据并进行转换。测试类应该测试这个转换函数。但是我可以测试这个函数,我需要一个ResultSet对象。

如何在没有数据库连接的情况下填充ResultSet对象中的某些数据?

2 个答案:

答案 0 :(得分:1)

从数据库中读取涉及集成测试,而不是单元测试。因此,您可以而且应该使用原始ResultSet,因为集成测试会在帐户中采用真正的后端(如数据库)。

如果您尝试对逻辑进行单元测试,则存根或模拟特定的DAO被调用部分,以便返回要测试的样本数据。但在这种情况下,根本不要调用数据库(不要处理ResultSet)。

答案 1 :(得分:1)

类似于以下代码: 您需要一个用于Db访问的接口。 您在代码和测试代码中使用的此接口: myDbConnectionMock是一个Mock对象,它具有与Db连接相同的接口, 但它是你创造的一个物体,你可以在哪里填写你想要的东西:

我不会使用Mockito或更糟糕的EasyMock。

我输入短信的代码(希望可编译,可能不是):

public void testDBConnection() {

  IDataBaseConnection conn = new MyDbConnectionMock();

  conn.connect();
  Set<Result> result = conn.readData();

  assertTrue(result.size > 0);
}

其中

 // Interface for DB connection, adapt to real DB connection
    public interface IDataBaseConnection {
       boolean connect();
       Set<Result> readData();
    }

// DB connection Mock
class MyDbConnectionMock implements IDbConnection {
  public void connect() {
     return true;
  }

  public Set<ResultSet> readData() {
     Set<Result> resultSet = new HashSet<Result>();
     Result res1 = new Result(20);
     resultSet.add(res1);

     Result res1 = new Result(30);
     resultSet.add(res2);
     return resultSet;
   }
}