Hrm。这取决于你如何创建你的Dao类。在ORMLite下,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;
}
然后你getTasksForNextTwoWeeks()
方法会做这样的事情:
public List<ITask> getTasksForNextTwoWeeks() throws SQLException {
QueryBuilder<ITask, String> qb = getDao().getQueryBuilder();
qb.where().gt(...);
return qb.query();
}
但是这需要一个好一点模拟得到QueryBuilder
。
我们所做的是扩展ORMLIte Dao
接口并将getTasksForNextTwoWeeks()
等方法添加到ITaskDao
类。
public interface ITaskDao extends Dao<ITask, String> {
public List<ITask> getTasksForNextTwoWeeks() throws SQLException;
...
}
然后你可以很容易地模拟出ITaskDao
并绕过所有的数据库操作。
希望这会有所帮助。
用于TDD的+1,以及robolectric/mockito组合。 – 2013-01-11 07:11:20