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));