Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
374 views
in Technique[技术] by (71.8m points)

android - Verify constructor lambda using mockk

I want to verify the number of calls being invoked by the lambda.

This lambda serves as a callback to deliver the state changes. I want to constraint the lambda to be used only via constructor.

Is there any way to test this when lambda is in constructor param?

Tried the following but this doesn't seem to work.

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("")
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In case someone is still looking here is how I solved it

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...