Android Architecture示例单元测试实时数据

问题描述 投票:1回答:1
@Test
fun sendResultToUI() {

    val foo = MutableLiveData<Resource<User>>()
    val bar = MutableLiveData<Resource<User>>()
    `when`(userRepository.loadUser("foo")).thenReturn(foo)
    `when`(userRepository.loadUser("bar")).thenReturn(bar)
    val observer = mock<Observer<Resource<User>>>()
    userViewModel.user.observeForever(observer) //Create foo and bar, observe user live data

    userViewModel.setLogin("foo")
    verify(observer, never()).onChanged(any()) //Make sure that setting login to foo did not touch vm.user?

    /*val fooUser = TestUtil.createUser("foo")
    val fooValue = Resource.success(fooUser)
    foo.value = fooValue
    verify(observer).onChanged(fooValue)
    reset(observer)

    val barUser = TestUtil.createUser("bar")
    val barValue = Resource.success(barUser)
    bar.value = barValue
    userViewModel.setLogin("bar")
    verify(observer).onChanged(barValue)*/
}

任何人都可以解释wtf这一行:verify(observer, never()).onChanged(any())在谷歌的GithubBrowser样本吗?我只是不明白它,调用setLogin()激发了观察者,所以当我们在前一行专门触发它时,我们怎么能验证onChanged()从未被调用过!?

android kotlin android-testing android-architecture-components android-livedata
1个回答
1
投票

调用setLogin()会触发观察者

不,调用setLogin只返回你的foo LiveData,基础值在你设置它之前还没有更新(foo.value = fooValue)。因此,如果没有收到任何值,则不会调用此行测试onChange

© www.soinside.com 2019 - 2024. All rights reserved.