Модульное тестирование Spring Boot с помощью Mockito и Junit 5, Как установить пароль для пользователя

#spring-boot #mockito #spring-boot-test

Вопрос:

У меня есть следующие тестовые классы для создания макета пользователя и проверки службы, которая изменяет пароли пользователей, но почему-то при инициализации пароля объекта пользователя всегда значение null.

 @Slf4j
@ExtendWith(MockitoExtension.class)
class UserServiceTest {

   @Mock UserRepository userRepository;

   @Mock ApiUtil apiUtil;
   @Mock PasswordEncoder passEncoder;
   @Mock EmailService emailService;

   @InjectMocks UserServiceV1 userService;
   @InjectMocks FakeUUIDProvider provider;
   @InjectMocks BCryptPasswordEncoder bcrypt;

   User user1;

   @BeforeEach
   public void setUp() {
     this.user1 = new User(
       this.provider.uuid(), 
       "username1", 
       "email1", "password1", 
       "displayName1", true
     );
   }

   @Test
   void shouldChangeUserPassword() throws Exception {

      // Stub
      when(this.userRepository.findByUsernameOrEmailAndIsActiveTrue(
        this.user1.getEmail(), this.user1.getEmail()))
            .thenReturn(Optional.of(this.user1));

      // Action
      final var retrivedUser = this.userService.forgotPassword(this.user1.getEmail());

      log.info(this.user1.getPassword());
   }
}
 

Объект retrivedUser имеет все остальные значения полей, кроме пароля, поле пароля всегда равно нулю. Я пробовал имитировать создание кодера паролей и BycryptPasswordEncoder, но все равно безуспешно.

Ожидаемым результатом будет то, что пользователь1 будет иметь пароль со значением «passsword1», не равным нулю;

Комментарии:

1. Уверен, что forgotPassword это не приведет к нулю? В противном случае в вашем сообщении недостаточно информации, чтобы ответить на ваш вопрос. Например, понятия не имею, что на самом деле делает `Забытый пароль».

2. @FlorianSchaetz нет, это не так, он просто меняет текущий пароль на другую случайную строку, хе-хе, я также пытался установить его непосредственно перед вызовом метода toString (), все тот же

3. Без кода, если пользователь, и забытого пароля и т. Д. будет трудно что-либо сделать вместо того, чтобы просто дико гадать. Я предполагаю, что хорошая отладка также помогла бы…