2012-11-29 52 views
2

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

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

+1

Willkommen。尝试使用mockito http://code.google.com/p/mockito/或http://www.easymock.org/。沃格尔在这里做了一个很好的教程:http://www.vogella.com/articles/EasyMock/article.html – Rekin

回答

1

从数据库读取关注点集成测试而不是单元测试。因此,您可以并应该使用原始的ResultSet,因为集成测试会考虑真实的后端(如您的数据库)。

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

1

类似于下面的代码: 您需要一个用于您的Db访问的接口。 你在代码和测试代码中使用此接口: myDbConnectionMock是具有像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; 
    } 
}