#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. Без кода, если пользователь, и забытого пароля и т. Д. будет трудно что-либо сделать вместо того, чтобы просто дико гадать. Я предполагаю, что хорошая отладка также помогла бы…