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);
// методы сравнения
→ Ссылка