Robolectric:使用本地SQLiteDatabase

时间:2014-06-23 08:52:40

标签: android robolectric

如何在robolectric 2.3中使用本地(DB on file system)SQLiteDatabase?互联网上的所有解决方案均指robolectric< 2.3。

我想这样做,因为robolectric在第二次或第三次测试中找不到创建的表。

1 个答案:

答案 0 :(得分:1)

我找到了一个使用特定注释的解决方案:

import org.robolectric.util.DatabaseConfig.UsingDatabaseMap;
import org.robolectric.util.DatabaseConfig.DatabaseMap;
....
@RunWith(RobolectricTestRunner.class)
@UsingDatabaseMap(DbMap.class)
public class GenericTest{....}

DbMap类必须实现

class DbMap implements DatabaseMap
{
    private static final String localDb = "/Users/elcapitano/temp/myDb.db";


    public String getDriverClassName()
    {
        return "org.sqlite.JDBC";
    }


    public String getSelectLastInsertIdentity()
    {
        return "SELECT last_insert_rowid() AS id";
    }


    public int getResultSetType()
    {
        return ResultSet.TYPE_FORWARD_ONLY;
    }

    public String getConnectionString(File arg0)
    {
        return String.format("jdbc:sqlite:%s", localDb);
    }
}

此外,'DbMap.localDb'的位置与通过'SQLiteDatabase.openOrCreateDatabase(dbFile.getAbsolutePath(),null);'初始化DB时的位置相同。也许这不相关。

在此之后,您可以在roboletric中使用本地文件数据库!