我正在测试LiveData
中的一些Viewmodel
我已经嘲笑LifecycleOwner
和LifecycleRegistry
我的测试方法如下:
@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));
}
运行此方法时,我在以下位置断言失败:
assertThat(viewModel.user().hasActiveObservers(),is(true));
我不明白为什么这失败了。如果hasActiveObservers()
至少有一个生命周期为true
或LiveData
状态(这表示状态为活动状态)的观察者,则Lifecycle.State.STARTED
应该返回Lifecycle.State.RESUMED
。
我在这里错过了什么吗?
答案 0 :(得分:2)
如果您嘲笑LifecycleRegistry
,则setCurrentState()
不会调用实际的实现。如果您想要LifecycleRegistry
的真实行为(即实际上将状态更改为活动状态),则应创建一个真实的LifecycleRegistry
对象。