Насмешливый java8 stream.map
Я использую mockito, как я могу смоделировать вызов stream.map().
Я пытался что-то вроде этого, которые возвращают ноль.
@Mock Stream<String> stringStream;
@Mock Stream<String> upperCaseStream;
when(stringStream.map(String::toUpperCase)).thenReturn(upperCaseStream);
syso(stringStream.map(String::toUpperCase));
Это печатает ноль.
Я ищу правильный способ насмешки, который возвратил бы 'upperCaseStream' в выводе.
1 ответ
Имейте в виду, что идентичность ссылок на методы или лямбда-выражения не обязательно будет одинаковой, даже если вызовы выглядят одинаково. Проверь это
Я не знаю много о Мокито, но я считаю, что он проверяет, существует ли значение, что when
зарегистрирован, это может включать вызов равных где-то, который не гарантирован, чтобы работать здесь. Например:
Function<String, String> fn1 = String::toUpperCase;
Function<String, String> fn2 = String::toUpperCase;
System.out.println(fn1.equals(fn2)); // false on my machine
Вы можете просто сохранить ссылку в переменной и использовать ее позже
Function<String, String> toUpperCase = String::toUpperCase;
when(stringStream.map(toUpperCase)).thenReturn(upperCaseStream);
System.out.println(stringStream.map(toUpperCase));
Кстати, я действительно не понимаю, зачем вообще издеваться Stream<String>
где вы можете просто сделать Stream.of("foo","bar")