Насмешливый 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")

Другие вопросы по тегам