Как проверить RxSharedPreferences? - PullRequest
0 голосов
/ 11 мая 2019

Мой вопрос о том, как протестировать RxSharedPreferences, так как установка значения в userPrefs не влияет на rxPreferences. userFavoriteStoreIds всегда возвращает пустое значение. Ниже я предоставляю класс, который я хочу проверить, а затем класс

class StoresRepository(private val prefs: SharedPreferences) {
 init {
    syncStores()
    val rxPreferences = RxSharedPreferences.create(userPrefs)
    userFavoriteStoreIds =  rxPreferences.getString(PREF_USER_FAVORITE_STORES_IDS)
  }


  fun getFavoriteStoreItems(): Flowable<List<DB.Store>> {
    return userFavoriteStoreIds.asObservable()
        .toFlowable(BackpressureStrategy.LATEST)
        .map { favoriteIdsString -> favoriteIdsString.split(";".toRegex()).dropLastWhile { it.isEmpty() } }
        .map { it.map { id -> id.toInt() } }
        .flatMap { favoriteIds ->
          storesDao.getStoresById(favoriteIds)
              .map {
                it.map { store -> store.copy(favorite = true) }
              })
        }
  }


}
Here is my test class

class StoresRepositoryTest {


    @Before
  fun setup() {
    userPrefs = mock()
    userPrefsEditor = mock {}
    `when`(userPrefs.edit()).thenReturn(userPrefsEditor)
    `when`(userPrefsEditor.putString(anyString(), anyString())).thenReturn(userPrefsEditor)
      `when`(userPrefs.getString(anyString(), anyString())).thenReturn("500,1259")

    storesRepository = StoresRepository(userPrefs)
  }

  @Test
  fun test_someXX() {

    Mockito.`when`(storesDao.getStoresById(listOf(2891, 500, 1259))).thenReturn(Flowable.just(asStoresByName()))
    Timber.i(TAG, " " + userPrefs.getString(StoresRepository.PREF_USER_FAVORITE_STORES_IDS,""))
    storesRepository.getFavoriteStoreItems().test()
        .assertValue(asStoresByName())
  }
}




...