Unit тестирование ViewModel в Android
Использую:
- Mockito (3.4.0)
- JUnit4
- LiveData (android arch components)
- ViewModel (android arch components)
ViewModel примерно следующего вида:
class MyViewModel(
private val interactor: Interactor,
private val mapper: Mapper
): ViewModel() {
private val myViewState: MutableLiveData < State > = MutableLiveData()
val viewState: LiveData < State > get() = myViewState
init {
load()
}
private fun load() {
interactor.getData()
.observeOn(Schedulers.computation())
.map(mapper::transform)
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
myViewState.value = State.Loading
}
.subscribe({
data - >
myViewState.value = State.Data(items = data)
}, {
myViewState.value = State.Error()
})
}
}
sealed class State {
object Loading: State()
class Data(val items: List < String > ): State()
class Error(): State() a
}
Unit test примерно такой
@Mock
private lateinit var viewStateObserver: Observer<State>
@Captor
private lateinit var viewStateCaptor: ArgumentCaptor<State>
@Test
fun test() {
viewModel = MyViewModel(interactor, mapper)
viewStateObserver.onChanged(viewStateCaptor.capture())
viewModel.viewState.observeForever(viewStateObserver)
}
Теперь в Unit тесте я пытаюсь отловить момент когда myViewState меняет свое состояние сначала на Loading, а потом на Data. Но всегда состояние последнее (Data), как мне получит список изменений по порядку?
Пытался разобраться с Captor, но не разобрался:))
Тут даже так, что я не успеваю подписаться на изменения, а значение в лайвдата уже поменялась несколько раз))