测试是否调用通过函数参数传递的函数(Android / Kotlin))

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试是否调用通过函数参数传递的函数(Android / Kotlin))相关的知识,希望对你有一定的参考价值。

有没有办法检查通过另一个函数的参数传递的函数是否被调用?例如,

override fun updateWeight(value: Editable,
                          showEmptyError: () -> Unit,
                          showOutOfRangeError: () -> Unit,
                          dismissAlertDialog: () -> Unit,
                          updateAndShow: (Float) -> Unit) {
    if (value.toString().trim().isEmpty()) {
        showEmptyError()
    } else {
        val floatVal = value.toString().trim().toFloat()
        if (floatVal > 300) {
            showOutOfRangeError()
        } else {
            dismissAlertDialog()
            updateAndShow(floatVal)
        }
    }
}

我需要使用value参数的不同值测试上面的方法,并检查哪个方法正在执行?我试着寻找答案,但我找不到合适的解决方案。

答案

你可以模拟lambda函数usins Mockito。例如showEmptyError测试:

@RunWith(MockitoJUnitRunner::class)
class TestUpdateWeight {
    @Mock
    lateinit var showEmptyError: () -> Unit
    @Mock
    lateinit var showOutOfRangeError: () -> Unit
    @Mock
    lateinit var dismissAlertDialog: () -> Unit
    @Mock
    lateinit var updateAndShow: (Float) -> Unit

    @Test
    fun testShowEmptyErorr() {
        updateWeight("", showEmptyError, showOutOfRangeError, dismissAlertDialog, updateAndShow)

        verify(showEmptyError).invoke()
        verifyNoMoreInteractions(showOutOfRangeError)
        verifyNoMoreInteractions(dismissAlertDialog)
        verifyNoMoreInteractions(updateAndShow)
    }
}
另一答案

您可以使用不同的标记记录值,例如您可以记录的showEmptyError方法

Log.d("showEmptyError value",value.toString()) // inside your showEmptyError() method

与不同的方法相同使用不同的标签,Log.d中的第一个参数和你的结果将在Logcat中打印。

但要做到这一点,你必须接受showEmptyError中的value参数。所以原型应该是showEmptyError(value:Editable)

以上是关于测试是否调用通过函数参数传递的函数(Android / Kotlin))的主要内容,如果未能解决你的问题,请参考以下文章

在递归函数的函数调用中修改通过引用传递的参数

调用函数和被调用函数之间的参数传递是通过啥来传的

GroovyGroovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

将 0 传递给具有默认值的函数

是否可以将字符串流作为函数参数传递?

c语言函数参数传递方向