Тестирование ViewModel в Android с сопрограммами Koin и Kotlin

Я начал использовать Koin, и мне нужно протестировать ViewModel, который просит репозиторий получить файл из внутренней памяти телефона.

Когда я устанавливаю тест ViewModel, я делаю:

@Before
    fun setup() {
        startKoin {
            modules(dataModule)
        }
        declareMock<Repository> {
            fakeAccount = moshiAccountAdapter.fromJson(json)
            whenever(this.getAccount()).thenReturn(fakeAccount)
        }
    }

но метод getAccount репозитория - suspend fun getAccount(): Account?, поэтому в классе ViewModelTest появляется сообщение suspend function getAccount should be called only from a coroutine or from another suspending function.

Заранее спасибо!


person noloman    schedule 29.09.2019    source источник


Ответы (1)


Вы можете использовать блок runBlocking { } для запуска приостановленных функций в тестовых целях.

person Kuba Pawłowski    schedule 29.09.2019
comment
где именно ты имеешь в виду, что я должен это сделать? - person noloman; 29.09.2019
comment
fun setUp() = runBlocking{ ...} или где-нибудь между вызовами приостановленной функции. Этот блок фактически запускает сопрограмму, я предлагаю прочитать об этом, чтобы получить более глубокие знания о сопрограммах, которые вам очень помогут. - person Kuba Pawłowski; 29.09.2019
comment
Я уже пробовал это, и AS говорит suspension functions can be called only within corutine body - person noloman; 29.09.2019
comment
ну, я только что переместил эту заглушку в тест, который находится внутри runBlockingTest, и теперь он работает, спасибо! - person noloman; 01.10.2019