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!"
}
}
我有 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!"
}
}