我想做一个简单的服务器,可以接收来自服务的Web挂钩请求并为我处理。出于乐趣,我想在Go中构建它,因为这听起来像是一种不错的语言,并且这是一个简单的项目。
服务器似乎工作正常,但是我无法通过单元测试工作。经检查,似乎每个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)
}
您的处理程序已在中注册main
,但main
在运行单元测试时不会被调用。因此,当您尝试通过进行测试时DefaultMux
,没有注册任何处理程序,并且得到404。但是,通常,您测试的是处理程序,而不是多路复用器。所以代替这行:
http.DefaultServeMux.ServeHTTP(rr, req)
您可以改为测试:
pingHandler(rr, req)
即使main
未执行注册处理程序,该方法仍然有效,因为您现在正在直接测试处理程序。
您还应该httptest.NewRequest
用来创建测试请求;http.NewRequest
用于创建要在中使用的请求Client
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句