WireMock Java : guide complet avec exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

WireMock pour Java : Guide complet du serveur HTTP mock

1. Qu'est-ce que WireMock et pourquoi l'utiliser ?

WireMock est une bibliothèque puissante pour Java (et d'autres langages via un serveur autonome) qui permet de créer des serveurs HTTP mock pour les tests. Concrètement, c'est un émulateur de service HTTP réel (API, REST, SOAP) que vous pouvez configurer pour qu'il renvoie des réponses prédéfinies à des requêtes spécifiques. C'est un outil indispensable pour tout développeur ou testeur travaillant avec une architecture microservices ou tout système dépendant de services HTTP externes.

Pourquoi en avez-vous besoin ? Dans le développement moderne, les applications existent rarement de manière isolée. Elles communiquent avec des bases de données, des passerelles de paiement, des services d'authentification, des API météo et des dizaines d'autres systèmes externes. Tester ces intégrations "en direct" est un casse-tête : le service externe peut être indisponible, lent, renvoyer des données inattendues ou, pire encore, vous facturer chaque requête. WireMock résout ce problème en vous permettant de :

  • Tester en isolation : Vous testez uniquement votre code, sans dépendre de la disponibilité et de la stabilité des services externes.
  • Simuler des scénarios rares : Forcez facilement le mock à renvoyer des erreurs 500, des timeouts, des réponses vides ou des en-têtes spécifiques — des situations difficiles à reproduire avec un service réel.
  • Accélérer vos tests : Le serveur mock répond en quelques millisecondes, alors qu'un service réel peut prendre plusieurs secondes.
  • Paralléliser le développement : Pendant que l'équipe backend n'a pas encore implémenté l'API, l'équipe frontend peut déjà écrire et tester son code en utilisant WireMock.

WireMock fonctionne comme un serveur HTTP complet (basé sur Jetty) qui se lance dans votre test ou comme un processus séparé. Il intercepte les requêtes HTTP, les compare à des règles configurées (stubs) et renvoie la réponse correspondante. La bibliothèque prend en charge l'enregistrement et la lecture (record/playback), la vérification d'état (verify), le travail avec des templates (Handlebars), la simulation de latences et bien plus encore.

2. Installation

WireMock pour Java est distribué via Maven Central. Ajoutez la dépendance suivante à votre fichier pom.xml (pour Maven) ou build.gradle (pour Gradle).

Maven (pom.xml) :

<dependency>
    <groupId>org.wiremock</groupId>
    <artifactId>wiremock</artifactId>
    <version>3.9.1</version> <!-- Vérifiez la version la plus récente sur Maven Central -->
    <scope>test</scope>
</dependency>

Gradle (build.gradle) :

testImplementation 'org.wiremock:wiremock:3.9.1'

Important : Depuis la version 3.x, WireMock nécessite Java 11 ou supérieur. Si vous utilisez Java 8, vous devrez utiliser la version 2.x (par exemple 2.35.1), mais il est fortement recommandé de passer à Java 11+.

3. Démarrage rapide — exemple minimal fonctionnel

Créons un test simple qui lance WireMock, configure un stub pour une requête GET vers /api/hello et vérifie que le client reçoit la réponse attendue.

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

Recommendations