如何使用Mockk库来模拟或窥探某些方法,但使用同一类中另一个方法的真实的逻辑?
下面是一个简化的父子类逻辑:
open class Parent() {
var condition = true
fun method1() {
if (condition) {
method2("bum")
} else {
method3(41)
}
}
fun method2(someStr: String): String {
//some complicated logic
return "some result"
}
fun method3(someInt: Int): Int {
//some complicated logic
return 42
}
}
class Child: Parent() { }
我想做一个测试:
@Test
fun `when condition is true, it should call method2`() {
clearAllMocks()
val child: Child = mockk()
child.condition = true
every { child.method2(any()) } returns "something"
every { child.method3(any()) } returns 11
child.method1()
verify(exactly = 1) { child.method2(any()) }
}
当然,这种测试逻辑是行不通的,但是我如何调用真实的method1
,而模拟的method2
和method3
呢?
1条答案
按热度按时间kq4fsx7k1#
用Mockk来嘲弄的方法有一些,但有一种除外:
可以使用
spyk
,但必须模拟需要使用every
模拟的方法的行为。对于非模拟的方法,不添加任何内容,或者确保其行为明确-可以添加callOriginal