Покрытие тестов в API - PullRequest
0 голосов
/ 13 июля 2020

Я изучаю тесты в Go, и я пытался измерить тестовое покрытие в API, который я создал:

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)
    }
}

И тест:

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)
    }
}

Когда я запускаю go test, все в порядке, тест прошел. Но когда я пытаюсь получить тестовое покрытие, я получаю это HTML:

0% покрытие

Я хотел бы понять, что здесь произошло, потому что это ни на что не распространяется. Кто-нибудь знает объяснить?

1 Ответ

0 голосов
/ 13 июля 2020

Я обнаружил свою ошибку:

Я пытался запустить тестовое покрытие с помощью следующих команд:

$ go test -run=Coverage -coverprofile=c.out
$ go tool cover -html=c.out

Но правильные команды:

$ go test -coverprofile=c.out
$ go tool cover -html=c.out

Результат:

60% покрытие

OBS: Я написал еще один тест, чтобы охватить все операторы switch. Спасибо за всех, и мне очень жаль, если я кого-то побеспокоил.

...