使用 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 中,我检查是否得到了我期望的参数。