我想测试以下方法:
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,);?