Итак, теперь я перехожу с Mockito 1. * на 2. * и не понимаю, почему возникает проблема с приведением при использовании getArgument () в doAnswer. Я имею в виду, когда я пытаюсь вызвать getArgument () в другом аргументе метода или я пытаюсь связать методы в извлеченном объекте.
Вот код, который работал с mockito 1. *
doAnswer(invocation -> {
try (InputStream inputStream = invocation.getArgumentAt(0, SomeResource.class).getResource().getInputStream()) {
IOUtils.copy(inputStream, invocation.getArgumentAt(1, OutputStream.class));
}
return null;
}).when(mockedService).downloadFile(any(), any());
Изменение getArgumentAt () на getArgument () после перехода на 2. * не удалось, потому что метод "getResource ()" не может быть найден с типом. Также получение второго аргумента из вызова не работало из-за несовместимого типа.
doAnswer(invocation -> {
try (InputStream inputStream = invocation.getArgument(0).getResource().getInputStream()) {
IOUtils.copy(inputStream, invocation.getArgument(1));
}
return null;
}).when(mockedService).downloadFile(any(), any());
Мне пришлось перейти к явному приведению во втором аргументе или явному сохранению в новую ссылку и то же самое для первого.
Этот код работает:
doAnswer(invocation -> {
final SomeResource input = invocation.getArgument(0);
final OutputStream outputStream = invocation.getArgument(1);
try (InputStream inputStream = input.getResource().getInputStream()) {
IOUtils.copy(inputStream, outputStream);
}
return null;
}).when(mockedService).downloadFile(any(), any());
Не знаю почему.