Как мне создать PagedList объекта для тестов? - PullRequest
0 голосов
/ 20 мая 2018

Я работал с библиотеками arch от Google, но одна вещь, которая усложнила тестирование, это работа с PagedList.

. В этом примере я использую шаблон репозитория и возвращаю детали из любого из них.API или сеть.

Итак, в ViewModel я вызываю этот метод интерфейса:

override fun getFoos(): Observable<PagedList<Foo>>

Затем репозиторий будет использовать RxPagedListBuilder для создания Observable типа PagedList:

 override fun getFoos(): Observable<PagedList<Foo>> =
            RxPagedListBuilder(database.fooDao().selectAll(), PAGED_LIST_CONFIG).buildObservable()

Я хочу иметь возможность для тестов настроить возвращение из этих методов, которые возвращают PagedList<Foo>.Что-то похожее на

when(repository.getFoos()).thenReturn(Observable.just(TEST_PAGED_LIST_OF_FOOS)

Два вопроса:

  1. Возможно ли это?
  2. Как мне создать PagedList<Foo>?

Моя цель - выполнить более полную проверку (например, убедиться, что на экране отображается правильный список Foos).Фрагмент / активность / представление - это фрагмент, наблюдающий PagedList<Foo> из ViewModel.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

простой способ добиться этого - это издеваться над PagedList.Это забавное «преобразование» списка в PagedList (в данном случае мы не используем реальный PagedList, а просто макетированную версию, если вам нужны другие методы PagedList, добавьте их в этом забавном)

 fun <T> mockPagedList(list: List<T>): PagedList<T> {
     val pagedList = Mockito.mock(PagedList::class.java) as PagedList<T>
     Mockito.`when`(pagedList.get(ArgumentMatchers.anyInt())).then { invocation ->
        val index = invocation.arguments.first() as Int
        list[index]
     }
     Mockito.`when`(pagedList.size).thenReturn(list.size)
     return pagedList
 }
0 голосов
/ 27 июня 2018
  1. Вы не можете преобразовать List в PagedList.
  2. Вы не можете создавать PagedList напрямую, только через DataSource.Одним из способов является создание FakeDataSource, возвращающего тестовые данные.

Если это сквозной тест, вы можете просто использовать базу данных в памяти.Добавьте свои тестовые данные перед вызовом.Пример: https://medium.com/exploring-android/android-architecture-components-testing-your-room-dao-classes-e06e1c9a1535

...