У меня есть следующий тестовый пример:
ClassPathResource resource = new ClassPathResource(...);
doReturn(resource.getInputStream()).when(someMock).getInputStream();
, где я читаю некоторый ресурс и возвращаю его в своем тесте. Этот метод вызывается с некоторой неопределенностью асинхронным, запланированным образом в реальном производственном коде - поэтому я не имею полного контроля над тем, сколько раз он вызывается точно , хотя возвращаемые данные всегда одинаковы ( или должно быть).
Другими словами, это может потенциально вызвать случайный сбой теста, если метод вызывается и поток читается больше раз, чем ожидалось, так как поток не имеет ( и не может быть сброшен, и уже находится на EOF
.
Я явно делаю не wi sh, чтобы синхронно вызывать его в контексте теста, и использую Awaitility.await()
для проверки таких сценариев ios, поэтому, к сожалению, это не вариант для меня.
Теперь, «тупой» способ потенциально исправить это что-то вроде следующего:
doReturn(resource.getInputStream()).doReturn(resource.getInputStream()).<...>.when(someMock).getInputStream();
Но это все еще не решает реальную проблему и в лучшем случае является бинтом.
Я действительно ожидал, что сработает что-то вроде следующего:
ClassPathResource resource = new ClassPathResource(...);
doReturn(resource.call().getInputStream()).when(someMock).getInputStream();
, но вы к сожалению, это также извлекает базовый поток только один раз.
Как я могу предоставить экземпляр fre sh при каждом вызове doReturn()
? Может ли mockito это сделать? Есть ли альтернативный подход к тому, что я sh должен сделать?