Android 架构示例单元测试实时数据
Android Architecture sample unit testing live data
@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)*/
}
任何人都可以解释这一行:verify(observer, never()).onChanged(any())
在 Google 的 GithubBrowser 示例中做了什么?我只是不明白,调用 setLogin()
触发 观察者,那么我们到底如何验证 onChanged()
在我们专门触发它时从未被调用过上一行!?
calling setLogin() fires the observer
不,调用 setLogin
只是 return 您的 foo
LiveData
,在您设置它之前,基础值不会更新 (foo.value = fooValue
) .因此,如果未收到任何值,则不会调用此行测试 onChange
。
@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)*/
}
任何人都可以解释这一行:verify(observer, never()).onChanged(any())
在 Google 的 GithubBrowser 示例中做了什么?我只是不明白,调用 setLogin()
触发 观察者,那么我们到底如何验证 onChanged()
在我们专门触发它时从未被调用过上一行!?
calling setLogin() fires the observer
不,调用 setLogin
只是 return 您的 foo
LiveData
,在您设置它之前,基础值不会更新 (foo.value = fooValue
) .因此,如果未收到任何值,则不会调用此行测试 onChange
。