使用 Robolectric 测试 SQLite

Posted

技术标签:

【中文标题】使用 Robolectric 测试 SQLite【英文标题】:Testing SQLite using Robolectric 【发布时间】:2014-12-08 20:25:30 【问题描述】:

我有一个扩展 SQLiteOpenHelper 并执行数据库功能的类。我想用 Robolectric 为它写一个测试。我相信 robolectric 设置得很好,因为我还有很多其他的测试可以工作。到目前为止,这是我尝试过的:

    我将数据库从我的设备复制到了 test/res/ 文件夹。

    String filePath = getClass().getResource("/UserData.db").toURI().getPath(); SQLiteDatabase db = SQLiteDatabase.openDatabase( (新文件(filePath)).getAbsolutePath(), 空值, SQLiteDatabase.OPEN_READWRITE);

这给了我一个空指针异常。看来 getResource() 总是返回 null。

    接下来,我尝试直接调用向数据库添加记录的方法

    用户 user = new User("username", "friendlyName", "password", "vin"); userDao.addUser(user);

这也会在首次访问数据库的位置引发 NPE。

我不知道如何修复空指针,我能想到的唯一其他选择是编写自定义 Shadow 类。有什么建议吗?

【问题讨论】:

请同时添加您遇到的异常的完整跟踪 原来这是我的代码中的一个问题。我有单元测试是件好事:P 无论如何,谢谢。 【参考方案1】:

在您的测试中使用

DatabaseHelper helper = new DatabaseHelper(Robolectric.application);

DatabaseHelper 扩展 SQLiteOpenHelper 的地方,它的构造函数看起来像

public DatabaseHelper(Context context)

    super(context, DATABASE_NAME, null, DATABASE_VERSION);

【讨论】:

以上是关于使用 Robolectric 测试 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

使用 Robolectric 测试 DialogFragments

Robolectric 单元测试中使用 Ressource

尝试使用 Robolectric 测试 XML 解析时出错

如何使用robolectric对Android音频录制应用进行单元测试

Robolectric:测试包含来自项目依赖的视图的活动

配置同时使用PowerMock和Robolectric对Android进行单元测试