Как проверить методы Dao, которые возвращают DataSource.Factory? - PullRequest
0 голосов
/ 28 февраля 2019

После перехода от 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

Хотя написание теста для getAllCards, insertCard и markRead тривиально, я все еще не уверен, как мне проверитьapis, которые возвращают DataSource.Factory, то есть getItemList apis.

После поиска в интернете я не смог найти ничего, связанного с этим.

Может кто-нибудь помочь, пожалуйста.

1 Ответ

0 голосов
/ 27 июня 2019

Вот как я это сделал:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...