使用 mockk 验证构造函数 lambda

Verify constructor lambda using mockk

我想验证 lambda 调用的调用次数。

此 lambda 用作传递状态更改的回调。我想限制 lambda 只能通过构造函数使用。

当 lambda 在构造函数参数中时,有什么方法可以测试它吗?

尝试了以下方法,但这似乎不起作用。

class SampleTest {

    private lateinit var sut: Sample

    @Test
    fun `test lambda is called`() {
        val captureCallback = slot<(String) -> Unit>()
        every {
            sut = Sample(capture(captureCallback))
        } answers {
            captureCallback.captured("")
        }
        verify(exactly = 1) {
            captureCallback.captured("")
        }
    }
}

class Sample(val onClick: (String) -> Unit) {

    init {
        triggerLambda()
    }

    private fun triggerLambda() {
        onClick("")
    }
}

如果有人还在看这里我就是这样解决的

class SampleTest {

    private val callback: (String) -> Unit = mockk(relaxed = true)

    @Test
    fun `test lambda is called`() {
        Sample(callback)
        verify(exactly = 1) { callback.invoke("") }
    }
}

Original Answer