0

我正在使用 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!
    }
}

这是怎么回事,我该如何解决?我正在监视该对象,因为我想验证是否调用了某些方法,但这在这里无关紧要。

4

1 回答 1

0

我的解决方案现在是对我感兴趣的类进行子类化,并将构造函数设为内部,以便我可以使用它。在子类中,我检查是否得到了我期望的参数。

于 2021-11-08T20:03:58.850 回答