Testando servidores HTTP com solicitações ao vivo no Go
Manipuladores de teste de unidade isoladamente são essenciais, mas podem ignorar os efeitos do roteamento e de outros middlewares . Para um teste abrangente, considere usar uma abordagem de "servidor ativo". teste do servidor. Ele cria um servidor usando o manipulador fornecido (neste caso, um roteador Gorilla mux). Aqui está um exemplo:
func TestIndex(t *testing.T) { // Cria o servidor usando o roteador inicializado em outro lugar. ts := httptest.NewServer(roteador) adiar ts.Close() newreq := func(método, string de URL, corpo io.Reader) *http.Request { r, err := http.NewRequest(método, url, corpo) se errar! = nulo { t.Fatal(erro) } retornar } testes := []estrutura { sequência de nome r *http.Solicitação }{ //Teste solicitações GET e POST. {nome: "1: testando get", r: newreq("GET", ts.URL "/", nil)}, {nome: "2: postagem de teste", r: newreq("POST", ts.URL "/", nil)}, // argumento do leitor necessário para POST } for _, tt := testes de intervalo { t.Run(tt.nome, func(t *testing.T) { resp, err := http.DefaultClient.Do(tt.r) adiar resp.Body.Close() se errar! = nulo { t.Fatal(erro) } // verifica a resposta esperada aqui. }) } }
Observe que httptest.Server pode ser usado para testar qualquer manipulador que satisfaça a interface http.Handler, não apenas Gorilla mux.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.
})
}
}
Embora o teste de servidor ativo forneça um teste mais realista, ele também pode ser mais lento e consumir mais recursos do que o teste de unidade. Considere uma combinação de testes unitários e de integração para uma estratégia de testes abrangente.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3