Я недавно начал использовать поток java и написать сервис с одним пользователем, который возвращает поток пользователей. Используя этот пользовательский поток, я обрабатываю другие логи c.
Ниже приведен фрагмент кода, с которым я имею дело в потоке, и он отлично работает
try (Stream<User> users = userService.getStream()) {
users.forEach(user -> {
});
Но когда я начинаю писать Junit, происходит сбой со следующим сообщением об ошибке.
java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.sourceStageSpliterator(AbstractPipeline.java:279)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647)
at com.test.UserService.sendBulkNotification(UserService.java:47)
at com.test.UserServiceTest.sendNotificationTest(UserServiceTest.java:64)
Вот мой код модульного теста:
List<User> users = new ArrayList<>();
for(long i = 1; i <= 5; i++) {
User user = new User();
user.setId(i);
users.add(user);
}
when(userService.getStream()).thenReturn(users.stream());
userService.sendNotification("user", 1, "test.com");
Не могли бы вы помочь мне написать контрольный пример с потоком / помочь мне решить эту проблему?