Android:想要但没有被调用,实际上,与这个模拟的交互是零

Android:想要但没有被调用,实际上,与这个模拟的交互是零,android,mockito,Android,Mockito,为ViewModel编写测试用例 其中,viewmodel使用包含数据源的repo执行操作。 在mDataSource.getWorks(回调)处出错 视图模型: mObsIsShowProgress.value = true mRepo!!.getWorks(object :DataSource.WorksListCallback { override fun onWorksListReceived(works:

为ViewModel编写测试用例

其中,viewmodel使用包含数据源的repo执行操作。 在mDataSource.getWorks(回调)处出错

视图模型:

            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))
}