#unit-testing #kotlin #junit #mocking #mockk
#модульное тестирование #kotlin #junit #издевательство #mockk
Вопрос:
Привет, коллеги-разработчики,
у меня следующая проблема:
Допустим, у меня есть класс с именем UseCaseX:
class UseCaseX (private val repository: Repository) {
override suspend fun invoke(params: Unit?) = repository.call()
}
Теперь этот UseCaseX используется в классе ViewModel, например:
...
val result = async { useCaseX.invoke(null) }
...
Затем я использую MockK для моделирования UseCaseX в ViewModelTest, например:
val useCaseX = mockk<UseCaseX>(relaxUnitFun = true)
И я получаю следующую ошибку:
io.mockk.MockKException: no answer found for: UseCaseX(#7).invoke(null, continuation {})
at io.mockk.impl.stub.MockKStub.defaultAnswer(MockKStub.kt:90)
at io.mockk.impl.stub.MockKStub.answer(MockKStub.kt:42)
Таким образом, очевидно UseCaseX.invoke(params)
, что функция расширяется во async{}
время с дополнительным параметром, и пока на него нет ответа.
Вопрос: как я могу предоставить ответ для макета в этом случае?
Ответ №1:
используйте withContext(Dispatchers.Default)
вместо async
. Должно сработать!