Я пытаюсь смоделировать вызов шпионского объекта и продолжаю получать org.mockito.exceptions.misusing.InvalidUseOfMatchersException
.
Пересмешивание вызова метода выглядит следующим образом:
@Spy
private AmazonS3Client m_clientToMockServer;
// (...)
Mockito.when(m_clientToMockServer.listObjects(Mockito.anyString(), Mockito.anyString()))
.thenAnswer((Answer<ObjectListing>) invocation -> {
ObjectListing objectListing = (ObjectListing) invocation.callRealMethod();
objectListing.setMaxKeys(2);
return objectListing;
});
Сообщение об ошибке гласит:
Нельзя использовать сопоставления аргументов вне проверки или создания заглушки.
Примеры правильного использования сопоставителей аргументов:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
Кроме того, эта ошибка может отображатьсяпотому что вы используете сопоставления аргументов с методами, которые нельзя смоделировать.Следующие методы не могут быть заданы / проверены: final / private / equals () / hashCode ().Методы насмешки, объявленные в закрытых родительских классах, не поддерживаются.
Я проверил, что AmazonS3Client.listObjects(String, String)
не является ни конечным, ни закрытым, поэтому я могу только предположить, что на самом деле я использовал неправильное совпадение параметров,И на самом деле, если я использую любую другую фактическую строку вместо Mockito.anyString()
соответствия, этот фрагмент кода работает.