У меня 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 на случай, если кто-то или они виноваты.
Заранее большое спасибо за помощь!