# Testing Patterns

> REST integration testing patterns with JUnit 5, Mockito, RestAssured. Use when writing integration tests that mock external dependencies, use Testcontainers/H2 for databases, and test endpoints with raw JSON bodies.

- Skill: `emvnuel/testing-patterns-2` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add emvnuel/testing-patterns-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/emvnuel/testing-patterns-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: emvnuel (https://skillmd.com/u/emvnuel)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/emvnuel/testing-patterns-2

---


# REST Integration Testing Patterns

Write integration tests for REST endpoints using Quarkus test framework.

---

## Quick Start

Basic REST integration test with RestAssured:

```java
@QuarkusTest
class OrderResourceTest {

    @Test
    void shouldCreateOrder() {
        given()
            .contentType(ContentType.JSON)
            .body("""
                {
                    "customerId": "cust-123",
                    "items": [{"productId": "prod-1", "quantity": 2}]
                }
                """)
        .when()
            .post("/orders")
        .then()
            .statusCode(201)
            .body("id", notNullValue())
            .body("status", equalTo("PENDING"));
    }
}
```

---

## Core Patterns

### REST Integration Tests

**Use**: Test full request/response cycle through REST layer  
**Stack**: `@QuarkusTest` + RestAssured  
**Cookbook**: [rest-integration-tests.md](./cookbook/rest-integration-tests.md)

### Mocking External Dependencies

**Use**: Isolate tests from external HTTP services, queues, etc.  
**Stack**: `@InjectMock` with Mockito  
**Cookbook**: [mocking-dependencies.md](./cookbook/mocking-dependencies.md)

### Database with Testcontainers

**Use**: Test against real PostgreSQL/MySQL  
**Stack**: Quarkus DevServices or `@Testcontainers`  
**Cookbook**: [testcontainers-setup.md](./cookbook/testcontainers-setup.md)

### Database with H2

**Use**: Fast in-memory alternative when container not needed  
**Stack**: H2 with test profile  
**Cookbook**: [h2-setup.md](./cookbook/h2-setup.md)

### Raw JSON Request Bodies

**Use**: Test with exact JSON payloads (no object serialization)  
**Stack**: Text blocks + JsonPath assertions  
**Cookbook**: [json-request-bodies.md](./cookbook/json-request-bodies.md)

### Test Structure & Lifecycle

**Use**: Organize tests with JUnit 5 features  
**Stack**: `@Nested`, `@BeforeEach`, naming conventions  
**Cookbook**: [test-structure.md](./cookbook/test-structure.md)

---

## Quick Reference

| Pattern             | When to Use                    | Key Annotation/Tool     |
| ------------------- | ------------------------------ | ----------------------- |
| REST Integration    | Test endpoint behavior         | `@QuarkusTest`          |
| Mock Dependencies   | Isolate from external services | `@InjectMock`           |
| Testcontainers      | Need real database behavior    | DevServices / Container |
| H2 In-Memory        | Fast tests, simple queries     | `%test` profile         |
| Raw JSON Bodies     | Exact payload control          | Text blocks             |
| Nested Test Classes | Group related scenarios        | `@Nested`               |

---

## Cookbook Index

**Core Testing**: [REST Integration Tests](./cookbook/rest-integration-tests.md) · [Test Structure](./cookbook/test-structure.md)

**Dependencies**: [Mocking Dependencies](./cookbook/mocking-dependencies.md)

**Database**: [Testcontainers Setup](./cookbook/testcontainers-setup.md) · [H2 Setup](./cookbook/h2-setup.md)

**Request/Response**: [JSON Request Bodies](./cookbook/json-request-bodies.md)

