Maison >développement back-end >Golang >Comment puis-je me moquer efficacement des clients HTTP pour des tests Go avancés ?
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 }
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 }
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)
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!