Android 状态恢复时,Observer.hasActiveObservers()为false?
我试图在Android 状态恢复时,Observer.hasActiveObservers()为false?,android,Android,我试图在Viewmodel中测试一些LiveData 我模仿了LifecycleOwner和LifecycleRegistry 我的测试方法如下: @Test public void testLifecycle(){ assertThat(viewModel.user().hasObservers(), is(false)); Observer<FirebaseUser> firebaseUserObserver = (Observer<FirebaseUse
Viewmodel
中测试一些LiveData
我模仿了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));
}
我不明白这为什么会失败<如果LiveData
至少有一个观察者的生命周期为lifecycle.State.STARTED
或lifecycle.State.recovered
状态,则code>hasactiveobserver()应返回true
我错过了什么吗?如果您模拟了
LifecycleRegistry
,那么setCurrentState()。如果您想要LifecycleRegistry
的真实行为(即,实际将状态更改为活动状态),那么您应该创建一个真实的LifecycleRegistry
对象。如果您模拟了LifecycleRegistry
,则setCurrentState()
不会调用实际实现。你为什么要嘲笑生命周期登记呢?@ianhanniballake说得通,你是对的。我应该像往常一样模仿LifecycleOwner并创建lifecycleregistry吗?这就是测试Viewmodel Livedata所应该做的吗?如果你想了解LifecycleRegistry
的真实行为,那么你应该创建一个真正的LifecycleRegistry
对象。好的,我明白了。测试正常运行,谢谢您的帮助。如果你愿意,你可以回复第一条评论作为回答,这样我就可以接受任何未来的观众。请调查这个问题,我试图解决它,但无法解决@ianhanniballake
assertThat(viewModel.user().hasActiveObservers(),is(true));