Como posso garantir que o pedido aconteceu corretamente quando zombando de uma API?

0

Pergunta

Vamos dizer que eu estou testando um recurso que chama um serviço da web, e que o serviço é ridicularizado com httptest.NewServer

func TestSomeFeature(t *testing.T) {
    server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(200)
    }))

    SomeFeature(server.URL, "foo")
}

func SomeFeature(host, a string) {
    if a == "foo" {
        http.Get(fmt.Sprintf("%v/foo", host))
    }
    if a == "bar" {
        http.Get(fmt.Sprintf("%v/bar", host))
    }
}

Como posso afirmar que o servidor foi chamado com o direito de url /foo e falhar o teste, se ele foi chamado com o url errado ou não chamado a todos?

go testing
2021-11-23 21:15:23
1

Melhor resposta

3

Você pode fazer assim:

func TestSomeFeature(t *testing.T) {
    called := false
    server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // assert that strings.Contains(r.RequestURI, "/foo") is true
        called = true
        w.WriteHeader(200)
    }))

    SomeFeature(server.URL, "foo")
    // assert that called is true
}
2021-11-23 21:19:38

Não há problemas de simultaneidade, se eu executar várias delas em paralelo com o mesmo server?
Timo Huovinen

@TimoHuovinen é claro que o código acima é para os ensaios sequenciais, você não especificar a simultaneidade em sua pergunta
blackgreen

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................