← Назад к вопросам

Какую библиотеку используешь для мокирования?

2.0 Middle🔥 191 комментариев
#Другое

Комментарии (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-разработчики, и его достаточно для подавляющего большинства тестов.