Tester les serveurs HTTP avec des requêtes en direct dans Go
Les gestionnaires de tests unitaires de manière isolée sont essentiels, mais peuvent négliger les effets du routage et d'autres middlewares . Pour un test complet, envisagez d'utiliser une approche « serveur en direct ».
Test de serveur en direct avec httptest.Server
Le type net/http/httptest.Server facilite le live tests de serveur. Il crée un serveur en utilisant le gestionnaire fourni (dans ce cas, un routeur Gorilla mux). Voici un exemple :
<code class="go">func TestIndex(t *testing.T) { // Create server using the router initialized elsewhere. ts := httptest.NewServer(router) defer ts.Close() 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 }{ // Test GET and POST requests. {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)}, {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // reader argument 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) } // check for expected response here. }) } }</code>
Notez que httptest.Server peut être utilisé pour tester n'importe quel gestionnaire qui satisfait à l'interface http.Handler, pas seulement Gorilla mux.
Considérations
Bien que les tests de serveur en direct fournissent un test plus réaliste, ils peuvent également être plus lents et plus gourmands en ressources que les tests unitaires. Envisagez une combinaison de tests unitaires et d'intégration pour une stratégie de test complète.
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!