У меня есть класс, который, по сути, выглядит следующим образом:
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());
Функция Iхочу издеваться надо быть родовым.Можно ли это сделать?
Например, моя первая попытка привела к следующему.Мало того, что я прибегнул к 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
.