Android:想要但不被调用,实际上,该模拟的交互为零

时间:2019-06-02 19:41:49

标签: android mockito

为ViewModel编写测试用例。

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

ViewModel:

2217093120

real    0m0.173s
user    0m0.226s
sys 0m0.033s

回购:

            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:

该测试旨在检查作品是否已加载。

class Repo(dataSource: RetrofitDataSource):DataSource {

    var mDataSource: RetrofitDataSource = dataSource
    override fun getWorks(callback: DataSource.WorksListCallback) {
        mDataSource.getWorks(callback)
    }


}

2 个答案:

答案 0 :(得分:1)

您必须先进行设置,然后必须声明预期的行为,例如when(something)。thenReturn(result),例如,在调用要测试的方法之前。最后,您声明期望的结果,例如assertEquals(expectedresult,yourmethodreturnedresult)。

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

答案 1 :(得分:0)

您可能将事物放错了顺序。验证不检查是否曾经调用过某些东西-它检查是否已经已经调用了。您可能想要最后一次验证。