Android:想要但没有被调用,实际上,与这个模拟的交互是零
为ViewModel编写测试用例 其中,viewmodel使用包含数据源的repo执行操作。 在mDataSource.getWorks(回调)处出错 视图模型:Android:想要但没有被调用,实际上,与这个模拟的交互是零,android,mockito,Android,Mockito,为ViewModel编写测试用例 其中,viewmodel使用包含数据源的repo执行操作。 在mDataSource.getWorks(回调)处出错 视图模型: mObsIsShowProgress.value = true mRepo!!.getWorks(object :DataSource.WorksListCallback { override fun onWorksListReceived(works:
mObsIsShowProgress.value = true
mRepo!!.getWorks(object :DataSource.WorksListCallback {
override fun onWorksListReceived(works: List<Work>) {
mObsWorksList.value = works;
mObsIsShowProgress.value = false
}
override fun onFailure(error_code: Int, reason: String) {
mObsIsShowProgress.value = false
}
})
ViewModelTest:
该测试旨在检查工程是否加载
// Executes each task synchronously using Architecture Components.
@get:Rule
var instantExecutorRule = InstantTaskExecutorRule()
@Mock
private lateinit var worksRepostiory: Repo
@Mock private lateinit var context: Application
@Captor
private lateinit var loadWorkCallbackCaptor: ArgumentCaptor<DataSource.WorkListCallback>
private lateinit var worksViewModel:ViewModel
private lateinit var worksList: List<Work>
@Test
fun loadWorksFromRepository_dataLoaded(){
// When loading of works is requested
worksViewModel.getWorks()
// Callback is captured and invoked with stubbed works
verify<Repo>(worksRepostiory).getWorks(capture(loadWorkCallbackCaptor))
// Then progress indicator is shown
assertTrue(LiveDataTestUtil.getValue(ViewModel.mObsIsShowProgress))
loadWorkCallbackCaptor.value.onWorksListReceived(worksList)
}
//使用体系结构组件同步执行每个任务。
@获取:规则
var instantExecutorRule=instantetaskexecutorrule()
@嘲弄
私有lateinit var WorksRepository:Repo
@模拟私有lateinit变量上下文:应用程序
@俘虏
私有lateinit var loadWorkCallbackCaptor:ArgumentCaptor
私有lateinit var worksViewModel:ViewModel
私有lateinit var工作列表:列表
@试验
fun loadWorksFromRepository_dataLoaded(){
//当要求装载工程时
worksViewModel.getWorks()
//回调被捕获并使用存根工作调用
验证(Worksrepository).getWorks(捕获(loadWorkCallbackCaptor))
//然后显示进度指示器
assertTrue(LiveDataTestUtil.getValue(ViewModel.MobsiShowProgress))
loadWorkCallbackCaptor.value.onWorksListReceived(工作列表)
}
你可能把东西放错了顺序。verify不检查是否调用过某个对象-它检查是否已调用该对象。您可能希望最后一次验证。您必须首先进行设置,然后必须声明预期的行为,如何时(某物)。然后返回(结果),例如,在调用要测试的方法之前。最后,断言预期结果,如assertEquals(expectedresult,yourmethodreturnedresult)
@测试
fun loadWorksFromRepository_dataLoaded(){
//测试方法
worksrepository.getWorks(loadWorkCallbackCaptor)
//试验
loadWorkCallbackCaptor.value.onWorksListReceived(工作列表)
验证(Worksrepository).getWorks(捕获(loadWorkCallbackCaptor))
assertTrue(LiveDataTestUtil.getValue(ViewModel.MobsiShowProgress))
}
通过发送模拟工作存储库修复了此问题
// Executes each task synchronously using Architecture Components.
@get:Rule
var instantExecutorRule = InstantTaskExecutorRule()
@Mock
private lateinit var worksRepostiory: Repo
@Mock private lateinit var context: Application
@Captor
private lateinit var loadWorkCallbackCaptor: ArgumentCaptor<DataSource.WorkListCallback>
private lateinit var worksViewModel:ViewModel
private lateinit var worksList: List<Work>
@Test
fun loadWorksFromRepository_dataLoaded(){
// When loading of works is requested
worksViewModel.getWorks()
// Callback is captured and invoked with stubbed works
verify<Repo>(worksRepostiory).getWorks(capture(loadWorkCallbackCaptor))
// Then progress indicator is shown
assertTrue(LiveDataTestUtil.getValue(ViewModel.mObsIsShowProgress))
loadWorkCallbackCaptor.value.onWorksListReceived(worksList)
}
@Test
fun loadWorksFromRepository_dataLoaded(){
//method to test
worksRepostiory.getWorks(loadWorkCallbackCaptor)
//test
loadWorkCallbackCaptor.value.onWorksListReceived(worksList)
verify<Repo>(worksRepostiory).getWorks(capture(loadWorkCallbackCaptor))
assertTrue(LiveDataTestUtil.getValue(ViewModel.mObsIsShowProgress))
}