Golang unittest http обработчик - PullRequest
       1

Golang unittest http обработчик

0 голосов
/ 12 октября 2018

Я хочу создать простой сервер, который сможет принимать запросы веб-хуков от сервисов и обрабатывать их для меня.И ради интереса я хотел построить это на Go, так как это звучит как хороший язык, и это простой проект для начала.

Сервер работает нормально, но я не могу получить свой unittestработать.При проверке кажется, что каждый URL дает 404. Что я делаю не так?

main.go

package main

import (
    "fmt"
    "log"
    "net/http"
)

func pingHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "{\"check\": \"online\"}")
}

func main() {
    // Start server
    log.Print("Starting server")
    http.HandleFunc("/ping", pingHandler)
    log.Fatal(http.ListenAndServe(":7080", nil))
}

main_test.go

package main

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

func TestPingHandler(t *testing.T) {
    req, err := http.NewRequest("GET", "/ping", nil)
    if err != nil {
        t.Fatal(err)
    }
    rr := httptest.NewRecorder()
    http.DefaultServeMux.ServeHTTP(rr, req)

    status := rr.Code
    fmt.Println(status)
}

1 Ответ

0 голосов
/ 12 октября 2018

Ваш обработчик зарегистрирован в main, но main не вызывается при выполнении юнит-тестов.Таким образом, когда вы пытаетесь протестировать через DefaultMux, обработчики не регистрируются, и вы получаете 404. Однако обычно вы тестируете обработчик, а не мультиплексор;поэтому вместо этой строки:

http.DefaultServeMux.ServeHTTP(rr, req)

Вместо этого вы должны проверить:

pingHandler(rr, req)

, который будет работать, даже если main не выполняется для регистрации обработчика, потому что вы сейчаснепосредственное тестирование обработчика.

Вы также должны использовать httptest.NewRequest для создания запросов на тестирование;http.NewRequest предназначен для создания запросов на использование в Client.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...