unit-test-wiremock-rest-api — скилл для Claude Code: тесты REST API
Скилл задаёт шаблоны юнит-тестов внешних REST API на WireMock: заглушки ответов, проверка запросов, имитация сбоев без реальной сети.
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a claude-codeЧто делает 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-code2Вручную: положить файлы
~/.claude/skills/unit-test-wiremock-rest-api/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/unit-test-wiremock-rest-api/
1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a codex2Вручную: положить файлы
.agents/skills/unit-test-wiremock-rest-api/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a cursor2Вручную: положить файлы
.cursor/skills/unit-test-wiremock-rest-api/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install giuseppe-trisciuoglio/developer-kit unit-test-wiremock-rest-api2Вручную: положить файлы
.github/skills/unit-test-wiremock-rest-api/SKILL.md1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a gemini-cli2Командой платформы
gemini skills install https://github.com/giuseppe-trisciuoglio/developer-kit --path plugins/developer-kit-java/skills/unit-test-wiremock-rest-apiВручную: положить файлы
.devin/skills/unit-test-wiremock-rest-api/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в 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