状态恢复后,Observer.hasActiveObservers()为false吗?

时间:2019-06-05 16:24:42

标签: android

我正在测试LiveData中的一些Viewmodel

我已经嘲笑LifecycleOwnerLifecycleRegistry

我的测试方法如下:

@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()至少有一个生命周期为trueLiveData状态(这表示状态为活动状态)的观察者,则Lifecycle.State.STARTED应该返回Lifecycle.State.RESUMED

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

如果您嘲笑LifecycleRegistry,则setCurrentState()不会调用实际的实现。如果您想要LifecycleRegistry的真实行为(即实际上将状态更改为活动状态),则应创建一个真实的LifecycleRegistry对象。