2

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

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

4

2 回答 2

1

从数据库读取涉及集成测试,而不是单元测试。因此,您可以并且应该使用原始ResultSet版本,因为集成测试需要考虑真正的后端(例如您的数据库)。

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

于 2012-11-29T14:10:46.333 回答
1

类似于下面的代码:您需要一个接口来访问数据库。您在代码和测试代码中使用的这个接口: 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;
   }
}
于 2012-11-29T14:11:44.300 回答