我正在使用 mokito-kotlin 测试我的代码,并且遇到了执行的 lambda 具有错误数据的情况。我发现我从 JavaScript 中知道的“范围”与预期的不同。当this
我使用 lambda 时,它是不同的spy()
。
这是我的简化测试:
@Test
fun strangeLambda() {
open class Foo {
var bar: String? = null
val lambda = { bar }
fun magic() = lambda()
}
Foo().apply {
bar = "jo"
assertEquals(magic(), "jo")
}
spy(Foo()).apply {
bar = "no"
assertEquals(bar, "no") // passes as expected
assertEquals(magic(), "no") // fails: magic returns null!
}
}
这是怎么回事,我该如何解决?我正在监视该对象,因为我想验证是否调用了某些方法,但这在这里无关紧要。