gpt4 book ai didi

unit-testing - Golang 单元测试 http 处理程序

转载 作者:数据小太阳 更新时间:2023-10-29 03:10:30 26 4
gpt4 key购买 nike

我想制作一个简单的服务器,它可以接收来自服务的 Web Hook 请求并为我处理它们。为了好玩,我想用 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。但是,通常您测试的是处理程序,而不是 mux;所以而不是这一行:

http.DefaultServeMux.ServeHTTP(rr, req)

你会改为测试:

pingHandler(rr, req)

即使未执行 main 来注册处理程序,这也会起作用,因为您现在正在直接测试处理程序。

您还应该使用 httptest.NewRequest创建测试请求; http.NewRequest 用于创建在 Client 中使用的请求。

关于unit-testing - Golang 单元测试 http 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com