httpmock Go : guide complet avec exemples

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

httpmock pour Go : guide complet avec exemples

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

La bibliothèque httpmock pour le langage Go offre un outil puissant et flexible pour simuler (mocker) les requêtes et réponses HTTP dans vos tests. Dans le développement logiciel moderne, l'interaction avec des API externes, des services web et des microservices est incontournable. Cependant, tester du code qui accède directement à ces ressources externes pose plusieurs problèmes : dépendance à la disponibilité du réseau, lenteur d'exécution des tests, imprévisibilité des réponses des serveurs réels et impossibilité de reproduire des cas limites (comme des timeouts ou des codes d'erreur spécifiques). httpmock résout ces problèmes en permettant aux développeurs d'intercepter les requêtes HTTP au niveau du transport Go et de renvoyer des réponses prédéfinies, isolant ainsi complètement le code testé du monde extérieur.

L'objectif principal de httpmock est de rendre les tests unitaires et d'intégration liés aux clients HTTP rapides, fiables et déterministes. Au lieu d'envoyer de vraies requêtes sur Internet, la bibliothèque remplace le transport HTTP standard de Go (http.RoundTripper) par le sien, qui fait correspondre les requêtes entrantes à un ensemble de "stubs" enregistrés. Chaque stub définit les conditions auxquelles une requête doit répondre (méthode, URL, en-têtes, corps) et la réponse à renvoyer. Cela permet de tester la logique de traitement des réponses, les tentatives de réessai, la gestion des erreurs et d'autres aspects sans avoir à déployer de vrais serveurs.

httpmock est particulièrement utile dans les scénarios suivants : tester des clients d'API REST, tester des services qui agrègent des données provenant de plusieurs sources externes, tester des gestionnaires de webhooks, ou encore lors du développement avec une connexion Internet limitée ou instable. Grâce à sa simplicité et à son intégration avec le package net/http, httpmock est la référence de facto pour le mocking HTTP dans la communauté Go.

2. Installation

L'installation de httpmock se fait de manière standard pour Go avec la commande go get. Assurez-vous d'avoir Go version 1.11 ou supérieure (pour la prise en charge des modules).

go get github.com/jarcoal/httpmock

Après avoir exécuté cette commande, la bibliothèque sera ajoutée à votre fichier go.mod. Pour mettre à jour vers la dernière version, utilisez :

go get -u github.com/jarcoal/httpmock

Vous pouvez maintenant importer la bibliothèque dans vos fichiers de test :

import "github.com/jarcoal/httpmock"

3. Démarrage rapide — un exemple minimal fonctionnel

Créons un test simple qui vérifie une fonction effectuant une requête GET vers une API externe et renvoyant le corps de la réponse. Nous allons simuler cette requête pour que le test s'exécute sans accès réseau réel.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

// FetchData effectue une requête GET à l'URL donnée et renvoie le corps de la réponse.
func FetchData(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }
    return string(body), nil
}

func main() {
    // Ceci est juste une démonstration, en réalité la fonction sera appelée depuis les tests.
    data, err := FetchData("https://api.example.com/data")
    if err != nil {
        fmt.Println("Erreur :", err)
        return
    }
    fmt.Println("Données :", data)
}

Écrivons maintenant un test utilisant httpmock :

package main

import (
    "testing"
    "github.com/jarcoal/httpmock"
)

func TestFetchData(t *testing.T) {
    // 1. Activer le mocking                    

Recommendations