К основному содержанию
скилл CX Codex

unit-test-wiremock-rest-api — скилл для Claude Code: тесты REST API

Скилл задаёт шаблоны юнит-тестов внешних REST API на WireMock: заглушки ответов, проверка запросов, имитация сбоев без реальной сети.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a claude-code
Открыть на GitHub

Что делает unit-test-wiremock-rest-api

Скилл описывает, как тестировать сервисы, которые ходят во внешние REST API. Вместо настоящих вызовов поднимается WireMock, ответы подменяются заглушками, а клиент проверяется на предсказуемых данных. Заодно закрываются сценарии ошибок: таймауты, ответы 4xx и 5xx, битые тела.

Внутри — пошаговая инструкция из шести шагов: добавить зависимость WireMock в тестовую область Maven или Gradle, зарегистрировать расширение через @RegisterExtension WireMockExtension с dynamicPort(), подставить базовый URL из wireMock.getRuntimeInfo().getHttpBaseUrl(), объявить заглушку через stubFor(), выполнить вызов и сверить результат с AssertJ, затем проверить запрос через verify(). Рядом лежит пример теста погодного клиента и файл references/advanced-examples.md со сбоями, проверкой тела, таймаутами и состоянием между вызовами.

Порт берите динамический: фиксированный ломает параллельный прогон тестов. Если заглушка не срабатывает, проверьте кодирование URL и имена заголовков, а для query-параметров используйте urlEqualTo. Тесты на TLS требуют настройки TLS в WireMock. WireMock добавляет накладные расходы, поэтому в самом скилле сказано: для скорости мокайте на уровне клиента.

Какие задачи решает

  • подменить ответ внешнего API заглушкой в юнит-тесте
  • проверить, что клиент шлёт нужные заголовки и query-параметры
  • воспроизвести таймаут и ответы 4xx или 5xx без реального сервера
  • убрать сетевые зависимости из тестов интеграций
  • сверить тело запроса с ожидаемым контрактом API

Примеры запросов агенту

  • напиши тест на WireMock для клиента WeatherApiClient
  • добавь заглушку на /weather?city=London и проверь запрос через verify
  • покажи, как имитировать таймаут внешнего API в тесте

Как установить unit-test-wiremock-rest-api

1Через Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a claude-code

2Вручную: положить файлы

~/.claude/skills/unit-test-wiremock-rest-api/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/unit-test-wiremock-rest-api/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о unit-test-wiremock-rest-api

Как установить unit-test-wiremock-rest-api в Claude?

Выполните npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a claude-code. Скилл окажется в ~/.claude/skills/unit-test-wiremock-rest-api/SKILL.md.

Что делает unit-test-wiremock-rest-api?

Даёт шаблоны юнит-тестов внешних REST API на WireMock: заглушки ответов, проверку деталей запроса и имитацию сбоев. Реальные сетевые вызовы при этом не выполняются.

Какие инструменты доступны скиллу?

Read, Write, Bash, Glob, Grep. Этого хватает, чтобы читать код тестов, писать новые файлы и запускать сборку.

Исходный текст

SKILL.md · MIT
---
name: unit-test-wiremock-rest-api
description: Provides patterns for unit testing external REST APIs using WireMock. Stubs API responses, verifies request details, simulates failures (timeouts, 4xx/5xx errors), and validates HTTP client behavior without real network calls. Use when testing service integrations with external APIs or mocking HTTP endpoints.
allowed-tools: Read, Write, Bash, Glob, Grep
---

# Unit Testing REST APIs with WireMock

## Overview

Patterns for testing external REST API integrations with WireMock: stubbing responses, verifying requests, error scenarios, and fast tests without network dependencies.

## When to Use

- Testing services calling external REST APIs
- Stubbing HTTP responses for predictable test behavior
- Testing error scenarios (timeouts, 5xx errors, malformed responses)
- Verifying request details (headers, query params, request body)

## Instructions

1. **Add dependency**: WireMock in test scope (Maven/Gradle)
2. **Register extension**: `@RegisterExtension WireMockExtension` with `dynamicPort()`
3. **Configure client**: Use `wireMock.getRuntimeInfo().getHttpBaseUrl()` as base URL
4. **Stub responses**: `stubFor()` with request matching (URL, headers, body)
5. **Execute and assert**: Call service methods, validate results with AssertJ
6. **Verify requests**: `verify()` to ensure correct API usage

**If stub not matching**: Check URL encoding, header names, use `urlEqualTo` for query params.

**If tests hanging**: Configure connection timeouts in HTTP client; use `withFixedDelay()` for timeout simulation.

**If port conflicts**: Always use `wireMockConfig().dynamicPort()`.

## Examples

### Maven Dependencies

```xml
<dependency>
  <groupId>org.wiremock</groupId>
  <artifactId>wiremock</artifactId>
  <version>3.4.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.assertj</groupId>
  <artifactId>assertj-core</artifactId>
  <scope>test</scope>
</dependency>
```

### Basic Stubbing and Verification

```java
import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.assertj.core.api.Assertions.assertThat;

class ExternalWeatherServiceTest {

  @RegisterExtension
  static WireMockExtension wireMock = WireMockExtension.newInstance()
    .options(wireMockConfig().dynamicPort())
    .build();

  @Test
  void shouldFetchWeatherDataFromExternalApi() {
    wireMock.stubFor(get(urlEqualTo("/weather?city=London"))
      .withHeader("Accept", containing("application/json"))
      .willReturn(aResponse()
        .withStatus(200)
        .withHeader("Content-Type", "application/json")
        .withBody("{\"city\":\"London\",\"temperature\":15,\"condition\":\"Cloudy\"}")));

    String baseUrl = wireMock.getRuntimeInfo().getHttpBaseUrl();
    WeatherApiClient client = new WeatherApiClient(baseUrl);
    WeatherData weather = client.getWeather("London");

    assertThat(weather.getCity()).isEqualTo("London");
    assertThat(weather.getTemperature()).isEqualTo(15);

    wireMock.verify(getRequestedFor(urlEqualTo("/weather?city=London"))
      .withHeader("Accept", containing("application/json")));
  }
}
```

See `references/advanced-examples.md` for error scenarios, body verification, timeout simulation, and stateful testing.

## Best Practices

- **Dynamic port**: Prevents conflicts in parallel test execution
- **Verify requests**: Ensures correct API usage by the client
- **Test errors**: Cover timeouts, 4xx, 5xx scenarios
- **Focused stubs**: One concern per test
- **Auto-reset**: `@RegisterExtension` resets WireMock between tests
- **Never call real APIs**: Always stub third-party endpoints

## Constraints and Warnings

- **Dynamic ports required**: Fixed ports cause parallel execution conflicts
- **HTTPS testing**: Configure WireMock TLS settings if testing TLS connections
- **Stub precedence**: More specific stubs take priority over general ones
- **Performance**: WireMock adds overhead; mock at client layer for faster tests
- **API changes**: Keep stubs synchronized with actual API contracts

## References

- [WireMock Documentation](https://wiremock.org/)
- [WireMock Stubbing Guide](https://wiremock.org/docs/stubbing/)
- `references/advanced-examples.md` - Error scenarios, body verification, timeouts

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Похожие скиллы

Всё по теме «Тесты и QA» →
131-java-testing-unit-testing Juan Antonio Breña Moral Скилл помогает писать и рефакторить модульные тесты на Java по стандартам JUnit 5, AssertJ и Mockito. Он находит антипаттерны вроде общего состояния и проверяет граничные условия. CX Codex +1 449установок java-junit официальный github Пишет, проверяет и исправляет Java-тесты на JUnit, AssertJ и Mockito. Нужен при добавлении, рефакторинге или разборе падений тестов в Maven и Gradle. 11 632установок 321-frameworks-spring-boot-testing-unit-tests Juan Antonio Breña Moral Скилл ведёт агента по юнит-тестам Spring Boot: Mockito без поднятия контекста, срезы для контроллеров, параметризованные тесты. Пригодится, когда в проекте расплодились @SpringBootTest. CX Codex +1 387установок spring-boot Mindrally Скилл задаёт агенту стиль кода на Spring Boot: REST-контроллеры, тесты, безопасность, сборка и деплой. Пригодится, когда проект на Java и хочется единообразия. CX Codex +1 832установок spring-framework Mindrally Скилл задаёт агенту правила разработки на Spring Framework и Spring Boot: структура слоёв, внедрение зависимостей, тесты, REST. CX Codex +1 731установок cli-anything-wiremock HKUDS Скилл даёт агенту терминальную обёртку над Admin API WireMock: ставить заглушки, считать пришедшие запросы, крутить сценарии. CX Codex +1 469установок

Из того же набора93

unit-test-parameterized Скилл для параметризованных тестов на JUnit 5: один метод гоняет много входных значений. Пригодится, когда надо покрыть граничные случаи без копипасты. CX Codex +1 3 800установок nextjs-authentication Скилл даёт готовые шаблоны аутентификации для Next.js 15+ App Router на Auth.js 5: провайдеры, защита маршрутов, сессии и роли. CX Codex +1 3 800установок spring-boot-dependency-injection Скилл внедряет паттерны внедрения зависимостей через конструктор в Spring Boot. Он помогает избавиться от field injection и настроить выбор бинов через @Primary и @Qualifier. CX Codex +1 3 800установок nextjs-code-review Проверяет код Next.js перед слиянием изменений: компоненты, серверные действия, кэш и маршруты. Пригодится после новой функции или миграции. CX Codex +1 3 800установок spring-boot-actuator Скилл помогает настроить Spring Boot Actuator: добавить пробы жизнеспособности для оркестраторов, защитить служебные эндпоинты и экспортировать метрики Micrometer в Prometheus. CX Codex +1 3 800установок spring-ai-mcp-server-patterns Скилл с шаблонами MCP-серверов на Spring Boot и Spring AI: инструменты через @Tool, промпт-шаблоны, транспорты stdio, HTTP и SSE. CX Codex +1 3 800установок nestjs-code-review Скилл для ревью NestJS-приложений: проверяет контроллеры, сервисы, модули, DI, гарды и работу с базой. Пригодится перед мержем пул-реквеста. CX Codex +1 3 800установок spring-boot-resilience4j Скилл добавляет паттерны отказоустойчивости Resilience4j в Spring Boot 3.x. Он помогает настроить размыкатели цепи и повторные вызовы при сбоях внешних сервисов. CX Codex +1 3 800установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой