我正在尝试使用Robolectric测试ORMLite DAOs,但数据库行为与从我的Android应用程序中使用时不同。我的DAO在Android应用程序上完美地工作。
阅读有关Robolectric Shadows和调试代码的内容,我遇到了ShadowSQLiteOpenHelper(代码here)。
有人知道这个Shadow是否足以测试ORMLite DAOs吗?还是我必须创建自己的Shadow才能实现?这里有任何线索/提示/建议/示例吗?
提前致谢。
阅读有关Robolectric Shadows和调试代码的内容,我遇到了ShadowSQLiteOpenHelper(代码here)。
有人知道这个Shadow是否足以测试ORMLite DAOs吗?还是我必须创建自己的Shadow才能实现?这里有任何线索/提示/建议/示例吗?
提前致谢。
额外信息:
测试方法:
@Test
public void basicTest() throws SQLException {
assertNotNull(randomStringResource); // Injection of an android resource: OK
assertThat(randomStringResource, equalTo("Event")); // With correct value: OK
assertNotNull(eventDao); // Dao injection: OK
assertThat(eventDao.countOf(), equalTo(0L)); // Table empty: OK
Event e1 = new Event("e1", new Date());
eventDao.create(e1);
assertNotNull(e1.getId()); // ID generated by OrmLite: OK
assertThat(eventDao.countOf(), equalTo(1L)); // Table not empty: OK
assertThat("e1", equalTo(eventDao.queryForId(e1.getId()).getName())); // Query for inserted event: Throws exception
}
在运行这个测试时遇到的一些问题:
- 查询具有“camelCased”属性名称的实体时出现错误:在测试的最后一行抛出错误(相关问题)。运行安卓应用程序从未遇到过这样的问题。
- 当我更改了其中一个属性的名称(例如:
isEnabled
更改为enabled
)以避免camelCase问题时,先前的错误仍然存在...似乎内存数据库没有应用我对实体所做的更改。
使用的版本:
- Robolectric 1.1
- OrmLite 4.41
MyDatabaseHelper.onCreate(..)
(它扩展了OrmLiteSqliteOpenHelper
)自动生成的,使用TableUtils.createTable(connectionSource, Event.class);
。 - jelies