Опираясь на ответ Сергея:
Фактическая реализация функции sayHello()
в переменной может иметь фактическое значение параметра функции по умолчанию sayHello()
.
Этот пример работает:
package tests
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
val sayHelloKotlin = { "Hello Kotlin!" }
fun sayHello(producer: () -> String = sayHelloKotlin): String = producer()
class Tests {
interface Producer {
fun produce(): String
}
@Test
fun `Top level mocking`() {
val mock = mockk<Producer>()
every { mock.produce() } returns "Hello Mockk"
val actual = sayHello(mock::produce)
Assertions.assertEquals(actual, "Hello Mockk")
}
}
Проблема в том, что вы меняете производственный код только для обслуживания тестирования, и он кажется надуманным.