findById не видит объект из mock
Пишу тест сервиса UserServiceImpl
public User getUserById(long id) {
Optional<User> optional = userRepository.findById(id);
User user = null;
if (optional.isPresent()) {
user = optional.get();
} else {
throw new RuntimeException("User not found for id: " + id);
}
return user;
}
UserServiceImplTest
@ExtendWith(MockitoExtension.class)
public class UserServiceImplTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserServiceImpl userService;
@Test
public void shouldReturnUserById() {
List<User> users = getUsers();
Long id = 1L;
Mockito.when(userRepository.findAll()).thenReturn(users);
System.out.println(users.get(0).getId());
User result = userService.getUserById(id);
Assertions.assertNotNull(result);
Assertions.assertEquals(users.get(0), result);
}
private List<User> getUsers() {
User firstUser = new User();
User secondUser = new User();
firstUser.setId(1L);
firstUser.setName("Вася");
firstUser.setLastName("Пупкин");
firstUser.setDepartment("Закупки");
firstUser.setPosition("Руководитель");
secondUser.setId(2L);
secondUser.setName("Петя");
secondUser.setLastName("Иванов");
secondUser.setDepartment("Продажи");
secondUser.setPosition("Специалист");
return List.of(firstUser, secondUser);
}
}
При запуске теста в методе userService.getUserById(id) - java.lang.RuntimeException: User not found for id: 1 Хотя в репозитории есть объект с таким ID. Подскажите, что я упустил?
Ответы (1 шт):
Автор решения: kio
→ Ссылка
Мок у вас повешен на findAll(), а в тестируемом методе getUserById() вы вызываете findById(id).
Попробуйте следующий вариант:
long id = 1L;
User user= new User();
user.setId(id);
user.setName("Вася");
user.setLastName("Пупкин");
user.setDepartment("Закупки");
user.setPosition("Руководитель");
Mockito.when(userRepository.findById(id)).thenReturn(user);
User result = userService.getUserById(id);
// методы сравнения