Maison >développement back-end >Golang >Comment tester efficacement les appels HTTP en Go à l'aide du package « httptest » ?
Comment tester les appels HTTP dans Go à l'aide de httptest
Dans Go, le package httptest offre un moyen pratique de tester vos appels HTTP. Il fournit à la fois des tests de réponse et de serveur pour un examen approfondi de la fonctionnalité HTTP de votre application.
Tests de réponse
Les tests de réponse se concentrent sur la validation de la réponse elle-même. Par exemple, vous pouvez vérifier le code d'état, les en-têtes et le contenu de la réponse. Voici un exemple :
func TestHeader3D(t *testing.T) { resp := httptest.NewRecorder() // ... setup the request with headers and parameters ... http.DefaultServeMux.ServeHTTP(resp, req) // ... assert the response body and content type ... }
Tests de serveur
Les tests de serveur, en revanche, vous permettent de tester l'ensemble du serveur HTTP, y compris ses routes et ses gestionnaires. Cette approche peut être utile pour tester le flux de requêtes via votre application. Voici un exemple utilisant la méthode httptest.NewServer() :
func TestIt(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // ... your handler setup and response ... })) defer ts.Close() // ... setup your requests and make assertions based on the responses ... }
Dans votre cas spécifique, vous pouvez utiliser des tests de serveur pour vous moquer de l'API de recherche Twitter avec une réponse prévisible. Cela vous permet de tester votre fonction sans effectuer d'appels HTTP réels.
func TestRetrieveTweets(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Set up your mock response for the Twitter API ... })) defer ts.Close() twitterUrl = ts.URL c := make(chan *twitterResult) go retrieveTweets(c) // ... assert the results you receive in the `c` channel ... }
N'oubliez pas que le paramètre r de votre fonction retrieveTweets est déjà un pointeur, il n'est donc pas nécessaire de le transmettre comme pointeur dans json.Unmarshal. .
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!