如何使用 mockito 测试 handler.postDelayed?

And*_*nov 2 android unit-testing mockito

我是单元测试的新手,我坚持测试以下方法:

    fun freeze(view: View) {
        view.isClickable = false
        handler.postDelayed({
             view.isClickable = true
        }, CLICK_TIMEOUT)
    }
Run Code Online (Sandbox Code Playgroud)

这是我已经拥有的:

    @Test
    fun freeze() {
        var view = mock<View>()
        viewUtil.freeze(view)
        assertFalse(view.isClickable)
    }
Run Code Online (Sandbox Code Playgroud)

但是现在我需要测试该视图在CLICK_TIMEOUT.

我该如何实施这种测试?

mrt*_*wel 8

如果您能够模拟Handler实例,则可以这样做:

Handler mockHandler = mock(Handler.class);
当(mockHandler.postDelayed(any(Runnable.class), anyLong())).thenAnswer(new Answer() {

    @覆盖
    public Object answer(InvocationOnMock invocation) 抛出 Throwable {
        invocation.getArgumentAt(0, Runnable.class).run();
        返回空;
    }

});