So beginnen bei ein wenig Kontext über das, was ich achive wollen:Wie kann ich keine Daten von Flowable für Komponententests emmittieren?
Ich habe Funktion in DataManager
Klasse mit dem Namen getBusRoutesByQuery(query: String)
die Flowable<List<Route>>
zurückgibt. Diese Funktion sucht im lokalen und Remote-Speicher nach Busrouten nach der angegebenen Abfrage. Ich verwende zip
, um zwei Flowables zu kombinieren und sie zu einem ohne Duplikate zusammenzufügen. Aber wenn der Benutzer zum ersten Mal die App benutzt, hat er keine Daten in der lokalen Quelle, so dass zip
nicht funktioniert. Also habe ich eine Funktion gefunden onErrorReturn
und ich benutze es, wenn es keine Daten zurückgeben wird. onErrorReturn
gibt leere Liste statt Fehler zurück, so dass die entfernte Quelle zip
mit leeren Daten ist. Und jetzt, wenn ich im Test Flowble.empty()
verwende, um Situation zu summieren, wo es keine Daten im lokalen Speicher gibt, wird der Test nicht bestanden.
-Test Annahmen:
- keine Daten im lokalen Speicher
- verfügbaren Daten in Remote-Speicher
getBusRoutesByQuery(query: String)
vonDataManager
- Daten aufgerufen wird, wird
Jetzt retriven wie es sieht im Code aus:
override fun getBusRoutesByQuery(query: String): Flowable<List<Route>> {
val networkSourceWithSave: Flowable<List<Route>> = remoteBusDataManager
.getBusRoutesByQuery(query)
.doOnNext { localBusDataManager.insertBusRoutes(it) }
.onErrorReturn { listOf() }
val localSource: Flowable<List<Route>> = localBusDataManager
.getBusRoutesByQuery(query)
.onErrorReturn { listOf() }
return Flowable.zip(localSource,
networkSourceWithSave,
BiFunction { local, remote -> mergeTwoListsWithoutDuplicates(local, remote) })
}
und der Test:
@Test
fun getRoutesByQueryWhenLocalSourceIsNotAvailable() {
`when`(localBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.empty())
`when`(remoteBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.just(ROUTES))
busDataManager.getBusRoutesByQuery(QUERY).subscribe(testSubscriber)
testSubscriber.assertValue(ROUTES)
}
Also sagen Sie mir, was kann ich mit zip
tun, wenn die lokale Speicherung Daten nicht verfügbar ist, und wie kann ich es testen. Danke;)
Dank, jetzt ist es funktioniert;) – Panczur