Lor*_*oog 5 java android unit-testing ormlite
我正在尝试采用TDD方法来创建Android应用程序.我正在使用ORMLite和Mockito/Robolectric进行测试.我在测试一个简单的事情时遇到了麻烦:
(包含DAO调用的某些类中的方法)
public List<ITask> getTasksForNextTwoWeeks() throws SQLException {
// Code to be written
}
Run Code Online (Sandbox Code Playgroud)
好吧,里面的代码只是一个正确的查询方法调用.
测试该代码的最佳方法是什么?我一直在考虑这个问题,但如果没有访问真正的数据库(无论是真实数据库还是测试数据库),都无法想到解决方案.
欢迎任何建议.
嗯。这在一定程度上取决于您如何创建 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;
}
Run Code Online (Sandbox Code Playgroud)
然后你的getTasksForNextTwoWeeks()方法会做类似的事情:
public List<ITask> getTasksForNextTwoWeeks() throws SQLException {
QueryBuilder<ITask, String> qb = getDao().getQueryBuilder();
qb.where().gt(...);
return qb.query();
}
Run Code Online (Sandbox Code Playgroud)
但这需要大量的模拟才能获得QueryBuilder.
我们所做的是扩展 ORMLIte接口并向类Dao添加类似的方法。getTasksForNextTwoWeeks()ITaskDao
public interface ITaskDao extends Dao<ITask, String> {
public List<ITask> getTasksForNextTwoWeeks() throws SQLException;
...
}
Run Code Online (Sandbox Code Playgroud)
然后您可以轻松模拟ITaskDao并绕过所有数据库操作。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |