[英]Mockito: how to mock doAnswer for a generic method
本質上,我有一堂課,看起來像這樣:
class Checkpointer {
public <Input,Output> Output runFunction(Input input, Function<Input,Output> function) {
Output output;
// Sometimes run the function, sometimes return an Output from a cache
return output
}
}
我想使用Mockito doAnswer
來模擬此類:
Checkpointer checkpointer; // mocked via @Mock annotation
Mockito
.doAnswer(/* ??? */)
.when(checkpointer)
.runFunction(Mockito.any(), Mockito.any());
我要模擬的功能需要通用。 能做到嗎?
例如,我的第一次嘗試產生了以下結果。 我不僅使用Object
作為Function
的類型參數,而且編譯器仍然對未檢查的強制轉換感到不滿意:
Mockito.doAnswer((invocation) ->
{
// compiler is not happy with this cast V
Function<Object,Object> function = (Function<Object,Object>)invocation.getArguments()[1];
return function.apply(invocation.getArgument(0));
}).when(checkpointer).runFunction(Mockito.any(), Mockito.any());
如果無法做到這一點,我認為可以嘗試編寫自己的模擬類並擴展第一個模擬類並使用Mockito.spy
。
這里的問題是您堅持使用getArguments
,該方法返回一個Object[]
由於您知道 Function
參數的索引,因此可以使用getArgument(index)
,因為在此之后進行此行。
final Function<String, String> argument = invocation.getArgument(1);
這是您要找的東西嗎? getArgument
泛型類型的類型推斷工作正常。
如果沒有,您能否提供一個更詳細的示例?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.