Android: тестирование ExecutorService в главном потоке - PullRequest
0 голосов
/ 11 января 2019

У меня ViewModel с кодом, который выполняется внутри блока execute (внутри Runnable). Все работает нормально, за исключением того, что я не могу успешно запустить код в основном потоке при его модульном тестировании (даже при отладке я вижу, что код внутри не запускается).

Если я запускаю код вне блока execute, тест работает нормально. У нас есть несколько вспомогательных функций, которые сделали эту работу в Java, но, очевидно, она не работает в Kotlin. То, как мы использовали для запуска кода внутри блока, было просто вызвать метод, который его выполняет, а затем вызвать один из двух методов ниже. Функции:

open fun runExecutor()
    {
        val captor = argumentCaptor<Runnable>()
        verify(executor, atLeastOnce()).execute(captor.capture())

        for (runnable in captor.allValues)
        {
            runnable.run()
        }
    }

    open fun runLastExecutor()
    {
        val captor = argumentCaptor<Runnable>()
        verify(executor, atLeastOnce()).execute(captor.capture())
        val runnableList = captor.allValues
        if (!runnableList.isEmpty())
        {
            runnableList[runnableList.size - 1].run()
        }
    }

Я использую Dagger 2 и в моем так называемом TestServiceModule у нас есть private val executor: ExecutorService = mock(). Может быть, полезно сообщить всем, что мы используем Mockito 2 и Mockito Kotlin на случай, если кто-то или они виноваты.

Заранее большое спасибо за помощь!

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