我想測試下面的方法:的Mockito驗證特定的拉姆達已經作爲參數在模擬的方法已通過
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/[email protected]
實際調用具有不同的參數:
..........Lambda$27/[email protected]
這是有意義的,因爲嘗試的Mockito比較功能接口的兩種不同的實現,其具有不同的散列碼。
所以有一些其他的方式來驗證方法dispatchMessage()
已經調用返回void並具有 dispatcher.dispatch("activityId", "ctxId", 1l,);
體方法的拉姆達?
這正是我想到的。 謝謝你的時間。 – JavaSloth