我有一个A类,它的方法是m1
和m2
。m2
被m1
调用。我必须通过模拟来自m2的响应来测试Main类。
虽然在测试函数中,我确实得到了模拟的响应,但在执行流程中,调用的是原始的m2
方法,而不是模拟的方法。
这是我得到的
class A {
fun m1(input: List<Int>): Int {
val x = m2(input)
return x*sum(input)
}
fun m2(input: List<Int>): Int {
return 2*sum(input)
}
}
class Main {
private val a = A()
fun run() {
val res = a.m1(listOf(1,2,3))
return val
}
}
@Test
class TestMain {
val mockA = mockkClass(A::class)
every { mockA.m2(any()) } returns 20
// check always returns the current mocked value 20
val check = mockA.m2(listOf(5,6))
// in this case m1 still calls m2 and not the mocked one
val res = Main().run()
}
我错过了什么?
1条答案
按热度按时间dwbf0jvd1#
您正在为类
A
创建一个模拟对象,但实际上并没有在代码中使用它。相反,您使用的是在Main类中创建的
A
的实际示例。要使用mock对象,您必须将其注入Main
类。打开
m2
方法,以便在测试中模拟它。向Main类添加了一个构造函数参数,以允许依赖注入。当调用
Main.run()
时,它将使用A.m2()
的模拟版本。