Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试类通过ORMLite和#x27与DB通信;s刀_Java_Android_Unit Testing_Ormlite - Fatal编程技术网

Java 测试类通过ORMLite和#x27与DB通信;s刀

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{ //要编写的代码 } 好吧,里面的代码将只是一个适当的查询方法调用 测试代码的最佳方法是什么?我一直在考虑这个问题,但是如果不访问真实数据库(无论是真实数据库还是测试数据库),我想不出解决方案

我试图在创建Android应用程序时采用TDD方法。我正在使用ORMLite和Mockito/Robolectric进行测试。我在测试一件简单的事情时遇到了麻烦:

(某些类中的方法包装DAO调用)

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

我们要做的是扩展ORMLIte
Dao
接口,并向
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 );