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

问题描述 投票:-1回答:2

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

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参数的不同值测试上面的方法,并检查哪个方法正在执行?我试着寻找答案,但我找不到合适的解决方案。

android unit-testing junit kotlin mockito
2个回答
1
投票

你可以模拟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)
    }
}

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.