Test en direct d'un serveur HTTP dans Go
Lors des tests unitaires des gestionnaires HTTP, il est essentiel de s'assurer qu'ils répondent avec précision aux différentes méthodes de requête. Les tests unitaires ne reflètent souvent pas le comportement réel du serveur lorsqu'il est utilisé avec un routeur tel que Gorilla mux. Pour des tests complets, une version « serveur live » est requise.
Solution : Utiliser httptest.Server
Le type net/http/httptest.Server offre un moyen pratique pour créer un serveur live pour les tests. Il prend un Handler en entrée, qui peut être un routeur, un ServeMux ou tout autre type implémentant l'interface Handler. Le code suivant démontre son utilisation :
<code class="go">import ( "io" "net/http" "net/http/httptest" "testing" ) func TestIndex(t *testing.T) { // Initialize the router as you would in a production environment. router := mux.NewRouter() router.HandleFunc("/", views.Index).Methods("GET") // Create a live server using the router. ts := httptest.NewServer(router) defer ts.Close() // Define a function to create requests for different methods and URLs. newreq := func(method, url string, body io.Reader) *http.Request { r, err := http.NewRequest(method, url, body) if err != nil { t.Fatal(err) } return r } tests := []struct { name string r *http.Request }{ {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)}, {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // body required for POST } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { resp, err := http.DefaultClient.Do(tt.r) defer resp.Body.Close() if err != nil { t.Fatal(err) } // Perform any additional checks on the response. }) } }</code>
Cette approche vous permet de tester l'ensemble du pipeline de traitement des requêtes, y compris les fonctions de routeur et de gestionnaire. Il garantit que les gestionnaires répondent correctement aux différentes méthodes HTTP et produisent les résultats attendus dans un environnement de serveur en direct.
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!