Mockito 验证特定的 lambda 是否已作为参数传递给 mock 的方法
我想测试以下方法:
public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) {
handler.registerMessage(() -> {
dispatcher.dispatch(argument1,
argument2,
argument3);
});
}
where 是一个帮助器类,它将以 lambda 的形式接受功能接口实现,并将其存储以供以后执行。MessageHandler
有没有办法用 mockito 验证 mocked 的方法是否已经使用特定的 lambda 表达式调用:dispatchMessage
MessageHandler
意思是,我可以写这样一个测试吗:
@Test
public void testDispatchMessage_Success() throws Exception {
myMessageDispatcher.dispatchMessage(handler, "activityId", "ctxId", 1l, );
verify(handler, times(1)).dispatchMessage(() -> {
dispatcher
.dispatch("activityId", "ctxId", 1l,);
});
}
}
此测试将导致断言错误:参数不同!想:
......Tests$$Lambda$28/379645464@48f278eb
实际调用有不同的参数:
..........Lambda$27/482052083@2f217633
这是有道理的,因为mockito试图比较功能接口的两个不同实现,它们具有不同的哈希代码。
那么有没有其他方法来验证该方法是否已被调用,该lambda返回void并具有body方法?dispatchMessage()
dispatcher.dispatch("activityId", "ctxId", 1l,);