Mockk - метод spyk mock только один раз - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть spyk из mockk библиотеки:

my = spyk(My())

позже я издеваюсь над одним из методов, чтобы вернуть что-то вроде:

every { my.method("someString") } returns something

Я создаю это spyk в методе @BeforeAll, и я использую его несколько раз, но иногда мне нужно вызывать реальную my.method("someString") вместо смоделированной версии, но эта every{} издевалась над ней повсюду.

Как заставить my вызывать реальный метод в некоторых случаях? Есть ли возможность сделать это?

1 Ответ

1 голос
/ 10 февраля 2020

для вызова оригинального метода, вы можете использовать ответный инфикс с лямбда-выражением. Эта лямбда получает MockKAnswerScope как this и содержит удобный callOriginal() метод

every { my.method("something") } answers { callOriginal() }

пример:

class ExampleUnitTest {

    private val my = spyk(My())

    @Test
    fun test() {
        val something = "Something"

        every { my.method("something") } returns something
        // now method will return specific value stated above
        assertEquals(something, my.method("something"))

        every { my.method("something") } answers { callOriginal() }
        // now method will call original code
        assertEquals("My something is FUN!", my.method("something"))
    }
}

class My {
    fun method(item: String): String {
        return "My $item is FUN!"
    }
}
...