Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Библиотеки мокирования в Java
Для мокирования в Java используется несколько основных библиотек, каждая с собственным подходом и синтаксисом.
Mockito — стандарт индустрии
Mockito — наиболее популярная библиотека мокирования в Java. Обладает простым и интуитивным API:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void testFindUser() {
User mockUser = new User(1L, "John");
when(userRepository.findById(1L)).thenReturn(Optional.of(mockUser));
User result = userService.findUser(1L);
assertThat(result).isEqualTo(mockUser);
verify(userRepository).findById(1L);
}
}
Преимущества:
- Простой синтаксис
when().thenReturn() - Встроенная поддержка
@Mockаннотаций - Проверка взаимодействия через
verify() - Работает с интерфейсами и классами
JUnit 5 с встроенными мок-расширениями
@ExtendWith(MockitoExtension.class)
class MyTest {
@Mock
private Dependency dependency;
}
PowerMock — для специальных случаев
Для мокирования статических методов, финальных классов (редко нужно):
@ExtendWith(PowerMockExtension.class)
@PrepareForTest(UtilityClass.class)
class SpecialTest {
@Test
void testStaticMethod() {
mockStatic(UtilityClass.class);
when(UtilityClass.staticMethod()).thenReturn("mocked");
}
}
TestNG с мокированием
Альтернативный фреймворк для unit-тестов с поддержкой параметризованных тестов.
Лучшие практики
- Используй Mockito как основную библиотеку для 95% случаев
- Мокируй зависимости, а не целые сервисы
- Проверяй поведение через
verify(), а не состояние - Избегай over-mocking — не мокируй то, что легко создать реальное
- ArgumentCaptor для проверки аргументов вызовов
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
verify(mock).someMethod(captor.capture());
assertThat(captor.getValue()).isEqualTo("expected");
Вывод: Используй Mockito — это стандарт, который знают все Java-разработчики, и его достаточно для подавляющего большинства тестов.