小编Jav*_*oth的帖子

Mockito验证了特定的lambda已经作为mock方法中的参数传递

我想测试以下方法:

    public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) {

    handler.registerMessage(() -> {
        dispatcher.dispatch(argument1,
                argument2,
                argument3);
    });

}
Run Code Online (Sandbox Code Playgroud)

MessageHandler辅助类在哪里将接受lambda形式的功能接口实现,并将其存储以供以后执行.

有没有办法验证mockito 已使用特定的lambda表达式调用dispatchMessagemocked 的方法MessageHandler:

意思是,我可以写一个这样的测试:

        @Test
public void testDispatchMessage_Success() throws Exception {

    myMessageDispatcher.dispatchMessage(handler, "activityId", "ctxId", 1l, );

    verify(handler, times(1)).dispatchMessage(() -> {
        dispatcher
            .dispatch("activityId", "ctxId", 1l,);
    });

}

}
Run Code Online (Sandbox Code Playgroud)

此测试将导致断言错误:参数不同!通缉:

......Tests$$Lambda$28/379645464@48f278eb
Run Code Online (Sandbox Code Playgroud)

实际调用有不同的参数:

..........Lambda$27/482052083@2f217633
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为mockito试图比较功能接口的两个不同实现,它们具有不同的哈希码.

那么有没有其他方法来验证该方法dispatchMessage()是否已使用返回void的lambda调用,并且body方法为 dispatcher.dispatch("activityId", "ctxId", 1l,);

java lambda mockito

19
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

lambda ×1

mockito ×1