Тест JUnit Mockito: ноль взаимодействий

Я хочу проверить этот список объектов, используя Junit и Mockito.

Если петля сформирована так:

       List<Message> owner = new ArrayList<>();

   for (int i = 0; i < messageStorage.getMessage(us.getName()).size(); i++) {
            owner.add(new Message(us.getName() + " - " + messageStorage.getMessage(us.getName()).get(i).getText(),
                    messageStorage.getMessage(us.getName()).get(i).getTime()));
        }
    listOfMessages.addAll(owner);

Тест в mockito работает нормально!

@Test
public void onTheWallTest() {
    when(clock.now()).thenReturn(parse("2014-12-03T10:15:30.00Z"));

    User follows = new User("someFollower");
    Mockito.when(userStorage.getUser(Matchers.anyString())).thenReturn(follows);
    wall.onTheWall();
    Mockito.verify(messageStorage).getMessage("someFollower");
}

Когда я использую forEach/лямбда таким образом:

 IntStream.range(0, owner.size())
                .forEach(i ->
                        owner.add(new Message(us.getName() + " - " + messageStorage.getMessage(us.getName()).get(i).getText(),
                                messageStorage.getMessage(us.getName()).get(i).getTime()))
                );
        listOfMessages.addAll(owner);

Тест не проходит с ответом:

    Wanted but not invoked:
messageStorage.getMessage("someFollower");
-> at app.command.WallTest.onTheWallTest(WallTest.java:47)
Actually, there were zero interactions with this mock.

Вы разместили только частичные фрагменты кода, поэтому об этом трудно рассуждать. Но если владелец также инициализируется с помощью List<Message> owner = new ArrayList<>(); в вашем потоковом коде, то IntStream.range(0, owner.size()) — это пустой поток. Повторение пустого потока ничего не даст.

JB Nizet 17.03.2019 11:41

Спасибо, возможно, мне нужно добавить сообщение в тест, чтобы покрыть его.

OutOfMemoryError 17.03.2019 11:46

Учитывая тот факт, что строка '.getUser(' может быть найдена только один раз в коде, а именно в насмешке, я полагаю, что раздел, который фактически запускает насмешку, отсутствует в предоставленных усилиях.

Andrey Lebedenko 17.03.2019 22:27

@AndreyLebedenko: тогда я могу заменить простой обычный цикл на Java 8/9 (лямбда) и работать в mockito?

OutOfMemoryError 18.03.2019 09:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я исправил так:

messageStorage.getMessage(us.getName())
              .stream()
              .map(item -> owner.add(
                  new Message(us.getName() + " - " + item.getText(), item.getTime())
              ));

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