Mockk - spyk 模拟方法只有一次

Mockk - spyk mock method only once

我有 spyk 来自 mockk 图书馆:

my = spyk(My())

稍后我将其中一种方法模拟为 return 类似于:

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

我在 @BeforeAll 方法中创建了这个 spyk 并且我重复使用了它几次,但有时我需要调用真实的 my.method("someString") 而不是模拟版本,但是这个every{}到处嘲笑它。

如何在某些情况下强制my调用真正的方法?有没有可能这样做?

要调用原始方法,您可以使用带有 lambda 的答案中缀。此 lambda 接收 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!"
    }
}