Я вызываю один общедоступный метод в своем JUnit и пропускаю вызов частного метода, который вызывается общедоступным.
SampleService sampleServiceSpy = Mockito.spy(sampleService); // I have reference to it through @InjectMocks
String str = Mockito.doReturn("Hiii").when(sampleServiceSpy ).sendRequestToAnotherComponent(<ARG1>,"?",<ARG3>);
String res = sampleServiceSpy.processRequest(<ARG1>, <ARG2>);
Здесь processRequest() - это общедоступный метод, а частный метод - sendRequestToAnotherComponent(), который я пропускаю, но проблема в том, что этот метод ожидает второй аргумент в качестве пути к каталогу, который представляет собой случайный UUID, генерируемый каждый раз по-разному, поэтому я не могу издеваться над ним. (В примере кода отображается как ?)
Есть ли способ передать любое значение и пропустить этот метод?
Я проверил, что Mockito.anyString() используется для создания фиктивных объектов и, следовательно, не может использовать его в этом тестовом примере.




Чтобы ответить на ваш прямой вопрос - используйте сопоставители - например:
Mockito.doReturn("Hiii").when(sampleServiceSpy).sendRequestToAnotherComponent(eq(<ARG1>),any(UUID.class), eq(<ARG3>));
Но вместо того, чтобы пытаться имитировать метод тестируемого класса, внедрите имитацию другого компонента. Таким образом, тест может вызвать verify(), который был вызван другим компонентом.
Это сработало, раньше я не использовал Matchers со всеми аргументами, что похоже на правило Thumb. Спасибо Эндрю за помощь.