【问题标题】:How to test Dao methods which return DataSource.Factory?如何测试返回 DataSource.Factory 的 Dao 方法?
【发布时间】:2019-02-28 07:55:03
【问题描述】:

在我的应用程序中从 SqliteOpenHelper 转移到 room 后,我尝试为 DAO 类编写测试。

我的 DAO 看起来像这样:

    @Query("SELECT * FROM cards")
    fun getAllCards(): List<CardData>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertCard(vararg cardData: CardData): List<Long>

    @Query("SELECT * FROM cards ORDER BY isRead ASC, id DESC")
    fun getItemList(): DataSource.Factory<Int, CardData>

    @Query("SELECT * FROM cards where instr(title, :query) > 0 ORDER BY isRead ASC, id DESC")
    fun getItemList(query: String): DataSource.Factory<Int, CardData>

    @Query("UPDATE cards set isRead = 1 where title = :title")
    fun markRead(title: String): Int

虽然为getAllCardsinsertCardmarkRead 编写测试是微不足道的,但我仍然不确定如何测试返回DataSource.Factory 的api,即getItemList api。

在互联网上搜索后,我找不到与此相关的任何内容。

有人可以帮忙吗。

【问题讨论】:

  • 嗨@Yashavi,除了创建一个类来实现接口并为其功能返回 mocks 之外,您是否能够找到解决方案?
  • @Enoobong:嘿,不。我还没有找到任何东西。

标签: android android-room android-testing android-paging


【解决方案1】:

我就是这样做的:

val factory = dao.getItemList()
val list = (factory.create() as LimitOffsetDataSource).loadRange(0, 10)

引用 CommonsWare

如果您对 Room 使用分页并让 @Dao 方法返回 DataSource.Factory,则生成的代码将使用名为 LimitOffsetDataSource 的内部类来执行 SQLite 操作并履行 PositionalDataSource 合同。

来源:https://commonsware.com/AndroidArch/previews/paging-beyond-room#head206

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2015-04-07
    • 2015-03-01
    • 2018-11-14
    • 2016-10-13
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多