Я использую библиотеку mockk Kotlin. У меня есть служба службы, которая имеет частный метод, вызывающий сторонний клиент.
class Service {
fun foo() {
bar()
}
private fun bar() {
client = Client()
client.doStuff()
}
}
Теперь в моем тесте мне нужно издеваться над клиентом, например.
@Test
fun `my func does what I expect` {
}
Мне также нужно издеваться над тем, что возвращает doStuff. Как мне добиться этого в Kotlin mockk?
Во-первых, вам никогда не следует создавать экземпляр зависимости, такой как Client
внутри вашего класса обслуживания, поскольку вы не можете получить к нему доступ для предоставления Mock. Давайте сначала разберемся с этим...
class Client { // this is the real client
fun doStuff(): Int {
// access external system/file/etc
return 777
}
}
class Service(private val client: Client) {
fun foo() {
bar()
}
private fun bar() {
println(client.doStuff())
}
}
а затем это, как использовать Mockk
class ServiceTest {
private val client: Client = mockk()
@Test
fun `my func does what I expect`() {
every { client.doStuff() } returns 666
val service = Service(client)
service.foo()
}
}