Spring WebFlux: метод block() возвращает значение null в Spring Data Reactive MongoDB

Я пытаюсь изучить проект Reactor и столкнулся с проблемой.

@Test
@DisplayName("check that standaloneUser fields are correct")
void validateUserFields() {
    userService.save(standaloneUser).subscribe();
    assertEquals(userService.count().block(), Long.valueOf(1));
    User user = userService.findByEmail("[email protected]").block();
    assertNotNull(user);
    assertNotNull(user.getId());
    assertEquals(user.getFirstName(), "test");
    assertEquals(user.getLastName(), "test");
    assertNotEquals(user.getPassword(), "test");
    assertEquals(user.getRole(), Role.CANDIDATE);
    assertNotNull(user.getCreatedDate());
    assertNull(user.getStoppedDate());
    assertEquals(user.getEmail(), "[email protected]");
}

Иногда метод block() возвращает null. Кто мне это объяснит? Спасибо


person maystrovyy    schedule 29.08.2017    source источник


Ответы (1)


block() может вернуть null, это означает, что Mono завершено пусто, что в данном случае означает, что пользователь не найден.

Может быть, он не был должным образом сохранен? (хотя вы утверждаете количество пользователей)

Обратите внимание, что вы делаете userService.save(standaloneUser).subscribe(). Эта форма часто не идеальна, так как это «асинхронный запуск и забвение»:

  • async -> он может завершиться после последующих утверждений
  • запустить и забыть -> отсутствие обработчика ошибок означает, что он может завершиться с ошибкой и скрыть ее от вас.

Заведите привычку хотя бы устанавливать лямбда-выражения обработчиков onNext и onError при вызове subscribe.

person Simon Baslé    schedule 30.08.2017