The TestObserver is an RxJava staple for testing.
It allows you to assert values in a stream, in the specific order they were emitted. Here’s a quick code snippet from the movies-usf repository :
@Test
fun onSearchingForMovieBladeRunner_shouldSeeSearchResult() {
viewModel = MSMainVm(mockApp, mockMovieRepo)
val viewStateTester = viewModel.viewState.test()
viewModel.processInput(SearchMovieEvent("blade runner 2049"))
viewStateTester.assertValueAt(1) {
assertThat(it.searchedMovieTitle).isEqualTo("Searching Movie...")
true
}
viewStateTester.assertValueAt(2) {
assertThat(it.searchedMovieTitle).isEqualTo("Blade Runner 2049")
// ...
true
}
}
If you look at the source for the base TestObserver, there are a bunch of these useful methods: