Java for Beginner
674 subscribers
556 photos
156 videos
12 files
850 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Проверка вызовов методов с помощью verify в Mockito

Mockito позволяет убедиться, что методы ваших mock-объектов вызывались определённое количество раз, в правильной последовательности или с определёнными параметрами. Это называется проверка взаимодействий.

Как работает verify?
List<String> mockList = Mockito.mock(List.class);

// Взаимодействие
mockList.add("Mockito");
mockList.clear();

// Проверка взаимодействий
Mockito.verify(mockList).add("Mockito"); // Проверяет вызов add с параметром "Mockito"
Mockito.verify(mockList).clear(); // Проверяет вызов clear


Если метод не был вызван, тест упадёт с ошибкой.

Расширенные проверки

Количество вызовов:
Mockito.verify(mockList, Mockito.times(1)).add("Mockito");
Mockito.verify(mockList, Mockito.never()).add("Spring");


Последовательность вызовов:
InOrder inOrder = Mockito.inOrder(mockList);
inOrder.verify(mockList).add("Mockito");
inOrder.verify(mockList).clear();


Проверка отсутствия взаимодействий:
Mockito.verifyNoInteractions(mockList);


Пример: Тестирование сервиса с использованием Mockito

Рассмотрим сервис, который взаимодействует с репозиторием:
@Service
public class UserService {
private final UserRepository userRepository;

public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public String getUserName(Long id) {
return userRepository.findById(id).orElse("Unknown");
}
}


Тест для этого сервиса:
@ExtendWith(MockitoExtension.class)
public class UserServiceTest {

@Mock
private UserRepository userRepository;

@InjectMocks
private UserService userService;

@Test
void getUserName_ReturnsCorrectName() {
// Stub репозитория
Mockito.when(userRepository.findById(1L)).thenReturn(Optional.of("John Doe"));

// Вызов метода
String result = userService.getUserName(1L);

// Проверки
Assertions.assertEquals("John Doe", result);
Mockito.verify(userRepository).findById(1L);
}

@Test
void getUserName_ReturnsUnknownForMissingUser() {
// Stub для случая, когда пользователь отсутствует
Mockito.when(userRepository.findById(2L)).thenReturn(Optional.empty());

// Вызов метода
String result = userService.getUserName(2L);

// Проверки
Assertions.assertEquals("Unknown", result);
Mockito.verify(userRepository).findById(2L);
}
}


Что мы сделали в тесте?


Создали mock для UserRepository с помощью @Mock.
Связали mock с тестируемым сервисом через
@InjectMocks.
Задали поведение mock-объекта с помощью when и проверили результат.
Убедились, что репозиторий вызван с нужными параметрами через
verify.

#Java #Training #Spring #Testing #Mockito #Verify