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

时间:2018-05-23 06:34:50

标签: android unit-testing junit kotlin mockito

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

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

2 个答案:

答案 0 :(得分:1)

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

@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)
    }
}

答案 1 :(得分:0)

您可以使用不同的标记记录值 与showEmptyError方法一样,您可以记录

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

与不同方法相同使用Log.d中第一个参数的不同标记 并且您的结果将在Logcat中打印。

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