Mockk - spyk 模拟方法仅一次

Ice*_*Ice 4 android kotlin mockk

spykmockk图书馆有:

my = spyk(My())
Run Code Online (Sandbox Code Playgroud)

后来我嘲笑其中一种返回类似内容的方法:

every { my.method("someString") } returns something
Run Code Online (Sandbox Code Playgroud)

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

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

V-m*_*ter 12

要调用原始方法,您可以使用带有 lambda 的答案中缀。这个 lambda 接收MockKAnswerScopethis,它包含方便的callOriginal()方法

every { my.method("something") } answers { callOriginal() }
Run Code Online (Sandbox Code Playgroud)

例子:

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!"
    }
}
Run Code Online (Sandbox Code Playgroud)