使用 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