I am currently writing tests using kotest and MockK in Kotlin. I encountered an error during the mocking process while writing tests in Kotlin using kotest and MockK.
every { accountService.findAccount(nonExistAccountId.toString()) } just Runs
//Kotlin: Type mismatch: inferred type is Runs but Awaits was expected
But previously, I didn't encounter any problems with the same process.
every { noticeRepository.delete(any()) } just Runs
//no error
So, I checked the declaration of 'just'.
/**
* Part of DSL. Answer placeholder for Unit returning functions.
*/
@Suppress("UNUSED_PARAMETER")
infix fun MockKStubScope<Unit, Unit>.just(runs: Runs) = answers(ConstantAnswer(Unit))
/**
* Part of DSL. Answer placeholder for never returning suspend functions.
*/
@Suppress("UNUSED_PARAMETER")
infix fun <T, B> MockKStubScope<T, B>.just(awaits: Awaits) = coAnswers { awaitCancellation() }
Why isn't the function above being called?
So, you don't have an error in this case because the
delete()
method innoticeRepository
returnsUnit
.just Runs
is only used to mock responses of functions or methods that returnUnit
When you want to mock response for method that actually DOES returns a values, you use different approach
More details can be found here: https://mockk.io/#answers