lundi 13 juillet 2020

Test coverage in API

I'm learning tests in Go and I have been trying to measure test coverage in an API that I created:

main.go

package main

import (
    "encoding/json"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", SimpleGet)

    log.Print("Listen port 8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

// SimpleGet return Hello World
func SimpleGet(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        http.NotFound(w, r)
    }

    w.Header().Set("Content-Type", "application/json")
    data := "Hello World"

    switch r.Method {
    case http.MethodGet:
        json.NewEncoder(w).Encode(data)
    default:
        http.Error(w, "Invalid request method", 405)
    }
}

And the test:

main_test.go

package main

import (
    "net/http"
    "net/http/httptest"
    "strings"
    "testing"
)

func TestSimpleGet(t *testing.T) {
    req, err := http.NewRequest("GET", "/", nil)
    if err != nil {
        t.Fatal(err)
    }
    w := httptest.NewRecorder()

    SimpleGet(w, req)

    resp := w.Result()

    if resp.Header.Get("Content-Type") != "application/json" {
        t.Errorf("handler returned wrong header content-type: got %v want %v",
            resp.Header.Get("Content-Type"),
            "application/json")
    }

    if status := w.Code; status != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
    }

    expected := `"Hello World"`
    if strings.TrimSuffix(w.Body.String(), "\n") != expected {
        t.Errorf("handler returned unexpected body: got %v want %v", w.Body.String(), expected)
    }
}

When I run go test it is fine, the test has passed. But when I try to get the test coverage, I got this HTML:

0% coverage

I would like to understand what is happened here because it has not covered anything. Does anyone know to explain?

Aucun commentaire:

Enregistrer un commentaire