我想为一个类创建一个Testclass,它从数据库中读取数据并转换它们。测试类应该测试这个转换函数。但是我可以测试这个函数,我需要一个ResultSet对象。自己创建一个ResultSet对象
如何在没有连接到数据库的情况下在ResultSet对象中填充一些数据?
我想为一个类创建一个Testclass,它从数据库中读取数据并转换它们。测试类应该测试这个转换函数。但是我可以测试这个函数,我需要一个ResultSet对象。自己创建一个ResultSet对象
如何在没有连接到数据库的情况下在ResultSet对象中填充一些数据?
从数据库读取关注点集成测试而不是单元测试。因此,您可以并应该使用原始的ResultSet
,因为集成测试会考虑真实的后端(如您的数据库)。
如果您尝试单元测试您的逻辑,存根或模拟您的特定DAO称为部分,以便返回要测试的示例数据。但在这种情况下根本不要调用数据库(不要处理ResultSet
)。
类似于下面的代码: 您需要一个用于您的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;
}
}
Willkommen。尝试使用mockito http://code.google.com/p/mockito/或http://www.easymock.org/。沃格尔在这里做了一个很好的教程:http://www.vogella.com/articles/EasyMock/article.html – Rekin