Этот вопрос проверяет понимание инструментов для тестирования, в частности, различий между библиотекой для мокинга объектов в юнит-тестах (Mockito) и инструментом для мокинга HTTP-сервисов (WireMock).
WireMock и Mockito — это два популярных инструмента для тестирования в экосистеме Java, но они решают разные задачи и применяются на разных уровнях тестирования.
WireMock — это библиотека, которая запускает полноценный HTTP-сервер (или использует прокси), способный перехватывать запросы и возвращать заранее сконфигурированные ответы (стабы). Он идеально подходит для интеграционного и контрактного тестирования, когда ваш код взаимодействует с внешними REST API, SOAP-сервисами или любыми другими HTTP-ресурсами.
Основные сценарии использования WireMock:
// Пример настройки стаба в WireMock (Java)
import static com.github.tomakehurst.wiremock.client.WireMock.*;
stubFor(get(urlEqualTo("/api/user/1"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{ \"id\": 1, \"name\": \"John\" }")));
// Теперь любой GET-запрос к /api/user/1 получит этот JSON-ответ.Mockito — это библиотека для создания mock-объектов, шпионов (spies) и заглушек (stubs) в рамках модульного (юнит) тестирования. Она работает внутри JVM и подменяет поведение конкретных зависимостей тестируемого класса (например, репозиториев, сервисов, утилит), позволяя изолировать тестируемую логику.
Основные сценарии использования Mockito:
// Пример использования Mockito в юнит-тесте
import static org.mockito.Mockito.*;
// Создаём mock-объект репозитория
UserRepository mockRepo = mock(UserRepository.class);
// Задаём поведение: при вызове findById(1L) возвращаем объект User
when(mockRepo.findById(1L)).thenReturn(new User(1L, "John"));
// Внедряем mock в тестируемый сервис и выполняем тест
UserService service = new UserService(mockRepo);
User user = service.getUser(1L);
// Проверяем, что метод был вызван ровно один раз
verify(mockRepo, times(1)).findById(1L);Вывод: Используйте Mockito для изоляции и тестирования внутренней бизнес-логики ваших классов в юнит-тестах. WireMock применяйте, когда необходимо протестировать взаимодействие вашего приложения с внешними веб-сервисами через HTTP, особенно в интеграционных тестах или при разработке в условиях, когда внешние API ещё не готовы или нестабильны.