【发布时间】:2019-03-08 15:27:24
【问题描述】:
我有一个课程A,如下所示:
class A(b: B) : B by b // Note the implementation of interface B by delegation to parameter b
interface B {
fun memberFunction() {}
}
fun B.extensionFunction() {}
我现在想验证是否正在调用 B#extensionFunction。我该怎么做?
我可以像这样验证B#memberFunction:
class BImpl : B // Dummy implementation needed to instantiate interface B
@Test
fun `memberFunction can be verified`() {
val bSpy = spyk<B>(BImpl)
val a = A(bSpy)
a.memberFunction()
verify { bSpy.memberFunction() }
}
但是,B#extensionFunction 的相同测试并不能解决问题;相反,我得到了一个java.lang.AssertionError。验证失败,因为调用没有发生。 (请注意,您必须使用静态模拟(使用mockkStatic 函数)才能验证扩展函数。)
供参考,使用的库:
- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11
- junit:junit:4.12
- io.mockk:mockk:1.9
【问题讨论】:
-
请注意,因为(在本例中)
BImpl是object,我也可以使用mockkObject而不是spyk。但是,使用spyk也可以,而且更通用。
标签: unit-testing kotlin mockk