Cum îți garantez că cererea s-a întâmplat în mod corect atunci când batjocoritor un API?

0

Problema

Să zicem că vreau să testez o caracteristică care solicită un serviciu web, și că serviciul este batjocorit cu 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))
    }
}

Cum pot afirma că serverul a fost numit cu drept url /foo și a picat testul, dacă acesta a fost numit cu url-ul greșit sau nu a sunat deloc?

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

Cel mai bun răspuns

3

Poti face astfel:

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

Nu sunt probleme de concurenta dacă am rula mai multe dintre acestea în paralel cu același server?
Timo Huovinen

@TimoHuovinen desigur codul de mai sus este pentru testare secvențială, nu ai specificat concurenta în întrebarea dvs.
blackgreen

În alte limbi

Această pagină este în alte limbi

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