Java 测试类通过ORMLite和#x27与DB通信;s刀
我试图在创建Android应用程序时采用TDD方法。我正在使用ORMLite和Mockito/Robolectric进行测试。我在测试一件简单的事情时遇到了麻烦: (某些类中的方法包装DAO调用)Java 测试类通过ORMLite和#x27与DB通信;s刀,java,android,unit-testing,ormlite,Java,Android,Unit Testing,Ormlite,我试图在创建Android应用程序时采用TDD方法。我正在使用ORMLite和Mockito/Robolectric进行测试。我在测试一件简单的事情时遇到了麻烦: (某些类中的方法包装DAO调用) public List getTasksForNextTwoWeeks()引发SQLException{ //要编写的代码 } 好吧,里面的代码将只是一个适当的查询方法调用 测试代码的最佳方法是什么?我一直在考虑这个问题,但是如果不访问真实数据库(无论是真实数据库还是测试数据库),我想不出解决方案
public List getTasksForNextTwoWeeks()引发SQLException{
//要编写的代码
}
好吧,里面的代码将只是一个适当的查询方法调用
测试代码的最佳方法是什么?我一直在考虑这个问题,但是如果不访问真实数据库(无论是真实数据库还是测试数据库),我想不出解决方案
欢迎任何建议。Hrm。这在一定程度上取决于您如何创建Dao类。在下,Dao类是一个接口,这意味着通过一点连接,您应该能够注入一个模拟Dao,并通过模拟处理查询调用 例如,在包装类上可以有一个
setDao
方法,如下所示:
public void setDao(Dao<ITask, String> dao) {
this.dao = dao;
}
private Dao<ITask, String> getDao() {
if (dao != null) {
// typical ORMLite pattern
dao = getHelper().getITaskDao();
}
return dao;
}
但这需要一点模拟才能获得QueryBuilder
我们要做的是扩展ORMLIteDao
接口,并向ITaskDao
类添加getTasksForNextTwoWeeks()
等方法
public interface ITaskDao extends Dao<ITask, String> {
public List<ITask> getTasksForNextTwoWeeks() throws SQLException;
...
}
公共接口ITaskDao扩展了Dao{
public List getTasksForNextTwoWeeks()抛出SQLException;
...
}
然后,您可以轻松模拟ITaskDao
并绕过所有数据库操作
希望这能有所帮助。我不喜欢格雷的回答,因为这让事情有点太复杂了。 我建议您只需通过传递null作为数据库名称来创建内存中的数据库:
OrmLiteSqliteOpenHelper(context,null, null, DATABASE_VERSION );
这样,您就可以在单个测试中通过
a) 添加模拟元素
b) 测试SqliteOpenHelper
-wrapper是否返回正确的结果
这样的每个测试都完全独立于您的实际数据库和套件中的其他测试 现在我想知道,是作为一个单元测试DAO更好,还是先用DB进行集成测试更好。模仿QueryBuilder看起来像是过度复杂。同意。我建议您的大多数程序模仿我提到的Dao。但是您仍然需要测试
ITaskDao
类,TDD为+1,以及robolectric/mockito组合。
public interface ITaskDao extends Dao<ITask, String> {
public List<ITask> getTasksForNextTwoWeeks() throws SQLException;
...
}
OrmLiteSqliteOpenHelper(context,null, null, DATABASE_VERSION );