如何测试返回 DataSource.Factory 的 Dao 方法?

Yas*_*svi 7 android android-testing android-room android-paging

从移后SqliteOpenHelperroom我的应用程序中,我试图写的测试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
Run Code Online (Sandbox Code Playgroud)

在写测试getAllCardsinsertCard并且markRead是微不足道的,我仍然不知道我怎么测试的API,其回报率DataSource.Factory,即getItemListAPI的。

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

有人可以帮忙吗。

gun*_*ess 7

这就是我所做的:

val factory = dao.getItemList()
val list = (factory.create() as LimitOffsetDataSource).loadRange(0, 10)
Run Code Online (Sandbox Code Playgroud)

引用 CommonsWare

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

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