Android: Разыскивается, но не вызывается. На самом деле с этим макетом не было никаких взаимодействий. - PullRequest
0 голосов
/ 02 июня 2019

Написание тестовых случаев для ViewModel.

В котором viewmodel выполняет операцию с использованием репо, содержащего источник данных. Ошибка возникает в mDataSource.getWorks (обратный вызов)

ViewModel:

            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
                }


            })

Репо:

class Repo(dataSource: RetrofitDataSource):DataSource {

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


}

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)


        }

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Сначала вы должны выполнить настройку, а затем указать ожидаемое поведение, например когда (что-то) .thenReturn (результат), например, прежде чем вызывать метод, который вы хотите проверить.Наконец, вы утверждаете ожидаемый результат, как assertEquals (ожидаемый результат, ваш метод возвращен результат).

@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))
}
0 голосов
/ 03 июня 2019

Вы, вероятно, поставили вещи в неправильном порядке.verify не проверяет, было ли когда-либо вызвано что-либо - оно проверяет, было ли уже уже вызвано .Вы, вероятно, хотите проверить последний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...