Мой вопрос о том, как протестировать 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())
}
}