I am trying to test some LiveData
in a Viewmodel
I have mocked both LifecycleOwner
and LifecycleRegistry
My test method below:
@Test
public void testLifecycle(){
assertThat(viewModel.user().hasObservers(), is(false));
Observer<FirebaseUser> firebaseUserObserver = (Observer<FirebaseUser>)mock(Observer.class);
viewModel.user().observe(lifecycleOwner, firebaseUserObserver);
assertThat(viewModel.user().hasObservers(), is(true));
lifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);
assertThat(viewModel.user().hasActiveObservers(),is(true)); //assertion failure
lifecycleRegistry.setCurrentState(Lifecycle.State.DESTROYED);
assertThat(viewModel.user().hasActiveObservers(), is(false));
}
When I run this method I get a assertion failure at:
assertThat(viewModel.user().hasActiveObservers(),is(true));
I don't understand why this fails. hasActiveObservers()
should return true
if LiveData
has at least one observer whose lifecycle is Lifecycle.State.STARTED
or Lifecycle.State.RESUMED
state (this means state is active).
Have I missed something here?