Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: WireMock, Mockito, mocking, unit testing, integration testing, HTTP stub

Что такое WireMock и как он отличается от Mockito?

Этот вопрос проверяет понимание инструментов для тестирования, в частности, различий между библиотекой для мокинга объектов в юнит-тестах (Mockito) и инструментом для мокинга HTTP-сервисов (WireMock).

Короткий ответ

WireMock — это инструмент для мокинга (имитации) HTTP-сервисов, который позволяет запускать "заглушку" веб-сервера, возвращающую заранее определённые ответы. Он используется для тестирования интеграции с внешними API, когда реальный сервис недоступен или нестабилен. Mockito — это библиотека для мокинга объектов в рамках юнит-тестов на Java, которая подменяет поведение конкретных классов и методов внутри тестируемого кода. Ключевое отличие: WireMock работает на уровне HTTP/сети, а Mockito — на уровне объектов в памяти JVM.

Длинный ответ

WireMock и Mockito — это два популярных инструмента для тестирования в экосистеме Java, но они решают разные задачи и применяются на разных уровнях тестирования.

WireMock: Мокирование HTTP-сервисов

WireMock — это библиотека, которая запускает полноценный HTTP-сервер (или использует прокси), способный перехватывать запросы и возвращать заранее сконфигурированные ответы (стабы). Он идеально подходит для интеграционного и контрактного тестирования, когда ваш код взаимодействует с внешними REST API, SOAP-сервисами или любыми другими HTTP-ресурсами.

Основные сценарии использования WireMock:

  • Тестирование клиента внешнего API без необходимости запуска реального сервера.
  • Имитация различных ответов сервера (успешных, ошибочных, с задержками) для проверки устойчивости вашего приложения.
  • Верификация того, что ваше приложение отправляет корректные HTTP-запросы (правильные заголовки, тело, метод).
// Пример настройки стаба в 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: Мокирование объектов в юнит-тестах

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);

Ключевые различия

  • Уровень работы: WireMock работает на сетевом уровне (HTTP), Mockito — на уровне объектов и вызовов методов в памяти.
  • Тип тестирования: WireMock чаще используется для интеграционного, контрактного или end-to-end тестирования. Mockito — для модульного (юнит) тестирования.
  • Зависимости: WireMock может мокировать любые HTTP-сервисы, независимо от языка их реализации. Mockito работает только с Java-объектами внутри тестируемого JVM-процесса.
  • Запуск: WireMock часто запускается как отдельный процесс (standalone) или встраивается (embedded) в тесты. Mockito работает исключительно внутри процесса тестов.

Вывод: Используйте Mockito для изоляции и тестирования внутренней бизнес-логики ваших классов в юнит-тестах. WireMock применяйте, когда необходимо протестировать взаимодействие вашего приложения с внешними веб-сервисами через HTTP, особенно в интеграционных тестах или при разработке в условиях, когда внешние API ещё не готовы или нестабильны.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Java

    Java

  • Testing

Ключевые слова

#WireMock

#Mockito

#mocking

#unit testing

#integration testing

#HTTP stub

Подпишись на Java Developer в телеграм