Unit тестирование ViewModel в Android

Использую:

  1. Mockito (3.4.0)
  2. JUnit4
  3. LiveData (android arch components)
  4. 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, но не разобрался:))

Тут даже так, что я не успеваю подписаться на изменения, а значение в лайвдата уже поменялась несколько раз))


Ответы (0 шт):