Android Mvvm协同程序Mockito测试视图模型给出错误
我测试viewmodel的测试用例如下所示:Android Mvvm协同程序Mockito测试视图模型给出错误,android,unit-testing,mvvm,mockito,kotlin-coroutines,Android,Unit Testing,Mvvm,Mockito,Kotlin Coroutines,我测试viewmodel的测试用例如下所示: @Before fun setUp() { loginActivityViewModel = LoginActivityViewModel(loginRepository) .apply { users.observeForever(userObserver) } } @Test fun `check user response when get successful response from server`() {
@Before
fun setUp() {
loginActivityViewModel = LoginActivityViewModel(loginRepository)
.apply { users.observeForever(userObserver) }
}
@Test
fun `check user response when get successful response from server`() {
testCoroutineRule.runBlockingTest {
//Given
whenever(loginRepository.getLoginResponse(loginRequest)).then(Answer { loginResponse })
//When
loginActivityViewModel.loginResponse(loginRequest)
//Then
verify(userObserver).onChanged(Resource.loading(data = null))
verify(userObserver).onChanged(Resource.success(data = loginResponse))
}
}
@Test
fun `check user response when get unsuccessful response from server`() {
testCoroutineRule.runBlockingTest {
//Given
whenever(loginRepository.getLoginResponse(loginRequest)).thenThrow(Error("Some error"))
//When
loginActivityViewModel.loginResponse(loginRequest)
//Then
verify(userObserver).onChanged(Resource.loading(data = null))
verify(userObserver).onChanged(Resource.error(message = "Some error"))
}
}
在此第一个测试用例内成功运行,但在运行第二个测试用例时出现以下错误:
需要但未调用:userObserver.onChanged(
资源(状态=错误,数据=空,消息=某些错误));
->在com.android.loginapp.viewmodel.LoginActivityViewModelTest$上,当从获取不成功的响应时,检查用户响应
服务器$1.invokeSuspend(LoginActivityViewModelTest.kt:83)
但是,与此模拟只有1次交互:
userObserver.onChanged(
资源(状态=加载,数据=空,消息=空);
->位于androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
我的viewModel网络调用方法如下所示:
fun loginResponse(loginRequest: LoginRequest) {
viewModelScope.launch {
users.postValue(Resource.loading(null))
try {
val usersFromApi = loginRepository.getLoginResponse(loginRequest)
users.postValue(Resource.success(usersFromApi))
} catch (e: Exception) {
users.postValue(Resource.error(e.message.toString()))
}
}
}
不确定它为什么会出现此错误。我需要使用
。然后抛出(RuntimeException(“test error”)
,然后只有它会通过