android–Robolectric:使用ormlite进行测试

android–Robolectric:使用ormlite进行测试,第1张

概述我正在尝试使用robolectric测试ORMLiteDAO,但数据库行为与从我的Android应用程序中使用它时的行为不同.我的DAO在Android应用程序上运行得非常好.阅读robolectric阴影和调试代码,我遇到了ShadowSQLiteOpenHelper(代码here).有谁知道这个暗影是否足以测试ormlitedaos?或者我必须

我正在尝试使用robolectric测试Ormlite DAO,但数据库行为与从我的Android应用程序中使用它时的行为不同.我的DAO在AndroID应用程序上运行得非常好.

阅读robolectric阴影和调试代码,我遇到了ShadowSQLiteOpenHelper(代码here).

有谁知道这个暗影是否足以测试ormlite daos?或者我必须创建自己的影子才能实现这一目标?这里有任何线索/提示/建议/示例吗?

提前致谢.

额外信息:

测试方法:

@Testpublic 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”属性名查询实体的错误:在最后一行测试时抛出错误(related problem).从来没有像运行AndroID应用程序这样的问题.
>当我更改其中一个属性名称(例如,isEnabled为启用)以避免camelCase问题时,之前的错误仍然存​​在…似乎内存数据库未应用我在实体上所做的更改.

使用的版本:

> Robolectric 1.1
> Ormlite 4.41

解决方法:

很抱歉复活你的主题,但我遇到了同样的问题.

我正在使用Ormlite 4.45和Robolectric 2.1.

在ShadowSQLiteCursor.java中,cacheColumnnames方法在每个列名称上调用tolowerCase.所以我决定使用我自己的(不调用tolowerCase)来扩展ShadowsqliteCursor:

/*** Simulates an AndroID Cursor object, by wrapPing a JDBC ResultSet.*/@Implements(value = sqliteCursor.class, inheritImplementationMethods = true)public class ShadowCaseSensitivesqliteCursor extends ShadowsqliteCursor {private ResultSet resultSet;public voID __constructor__(sqliteCursorDriver driver, String edittable, sqlitequery query) {}/** * Stores the column names so they are retrIEvable after the resultSet has closed */private voID cacheColumnnames(ResultSet rs) {    try {        ResultSetMetaData MetaData = rs.getMetaData();        int columnCount = MetaData.getColumnCount();        columnnameArray = new String[columnCount];        for(int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {            String cname = MetaData.getColumnname(columnIndex);            this.columnnames.put(cname, columnIndex - 1);            this.columnnameArray[columnIndex - 1] = cname;        }    } catch(sqlException e) {        throw new RuntimeException("sql exception in cacheColumnnames", e);    }}}

我的答案显然来得太晚,但可能会帮助别人!

总结

以上是内存溢出为你收集整理的android – Robolectric:使用ormlite进行测试全部内容,希望文章能够帮你解决android – Robolectric:使用ormlite进行测试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1109924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存