【发布时间】:2017-05-18 16:34:24
【问题描述】:
我想测试以下方法:
public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) {
handler.registerMessage(() -> {
dispatcher.dispatch(argument1,
argument2,
argument3);
});
}
其中MessageHandler 是一个帮助类,它将接受 lambda 形式的功能接口实现,并将其存储以供以后执行。
有没有办法用 mockito 验证被模拟的 MessageHandler 的 dispatchMessage 方法已被特定的 lambda 表达式调用:
意思,我能不能写这样一个测试:
@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 试图比较函数接口的两个不同实现,它们具有不同的哈希码。
那么有没有其他方法可以验证 dispatchMessage() 方法是否被调用了一个返回 void 的 lambda 并且有一个 body 方法
dispatcher.dispatch("activityId", "ctxId", 1l,); ?
【问题讨论】: