使用 mokito 的间谍时 lambda 中缺少数据
Missing data in lambda when using mokito's spy
我正在用 mokito-kotlin 测试我的代码,我 运行 遇到执行的 lambda 有错误数据的情况。我发现我从 JavaScript 知道的“范围”与预期的不同。当我使用 spy()
.
时,lambda 的 this
是不同的
这是我的简化测试:
@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!
}
}
这是怎么回事,我该如何解决?我正在监视该对象,因为我想验证是否调用了某些方法,但这在这里并不重要。
我现在的解决方案是子class 我感兴趣的 class 并将构造函数设为内部,以便我可以使用它。在 subclass 中,我检查是否得到了我期望的参数。
我正在用 mokito-kotlin 测试我的代码,我 运行 遇到执行的 lambda 有错误数据的情况。我发现我从 JavaScript 知道的“范围”与预期的不同。当我使用 spy()
.
this
是不同的
这是我的简化测试:
@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!
}
}
这是怎么回事,我该如何解决?我正在监视该对象,因为我想验证是否调用了某些方法,但这在这里并不重要。
我现在的解决方案是子class 我感兴趣的 class 并将构造函数设为内部,以便我可以使用它。在 subclass 中,我检查是否得到了我期望的参数。