Maison > développement back-end > Golang > Comment puis-je me moquer efficacement des clients HTTP pour des tests Go avancés ?

Comment puis-je me moquer efficacement des clients HTTP pour des tests Go avancés ?

Mary-Kate Olsen
Libérer: 2024-12-19 11:34:14
original
656 Les gens l'ont consulté

How Can I Effectively Mock HTTP Clients for Advanced Go Testing?

Moquerie de client HTTP pour les tests avancés

Dans la recherche de tests logiciels robustes et fiables, se moquer des clients HTTP est une pratique fondamentale. Cependant, y parvenir avec des interfaces personnalisées peut être difficile.

Considérons le scénario suivant dans lequel une interface HttpClient est utilisée avec une requête HTTP GET utilisant l'authentification de base :

func GetOverview(client HttpClient, overview *Overview) (*Overview, error) {
    request, err := http.NewRequest("GET", fmt.Sprintf("%s:%s/api/overview", overview.Config.Url, overview.Config.Port), nil)
    if (err != nil) {
        log.Println(err)
    }
    request.SetBasicAuth(overview.Config.User, overview.Config.Password)
    resp, err := client.Do(request)
    if (err != nil) {
        return nil, err
    }
    if resp.StatusCode != 200 {
        return nil, fmt.Errorf("Bad StatusCode: %v", resp.StatusCode)
    }
    return overview, nil
}
Copier après la connexion

Pour se moquer et simuler HTTP réponses, nous sommes confrontés à un dilemme. Les bibliothèques simulées existantes, telles que Gock, ne prennent en charge que les méthodes HTTP spécifiques telles que GET ou POST.

Approche simulée personnalisée

La clé pour se moquer de ce HttpClient est d'implémenter son interface avec une structure Mock personnalisée. Par exemple, nous pouvons définir une structure ClientMock avec une méthode Do correspondante :

type ClientMock struct {
}

func (c *ClientMock) Do(req *http.Request) (*http.Response, error) {
    // Simulate HTTP response with custom logic
    return &http.Response{}, nil
}
Copier après la connexion

Incorporer le Mock

Avec cette structure Mock en place, nous pouvons l'injecter dans la fonction GetOverview. Voici un exemple :

mock := ClientMock{}
overview, err := GetOverview(&mock, &overview)
Copier après la connexion

En utilisant ClientMock, nous pouvons contrôler la réponse HTTP simulée, permettant ainsi des tests unitaires complets sans recourir à des serveurs ou services HTTP externes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal