亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無需重置路由的最小 http 服務測試?

無需重置路由的最小 http 服務測試?

Go
紅糖糍粑 2023-06-19 15:12:31
假設我有一個非常簡單的 Web 服務。func main() {    http.HandleFunc("/", sanityTest)    log.Fatal(http.ListenAndServe(":8000", nil))}如果我想測試它,我至少可以擁有:func ExampleTest() {        server := httptest.NewServer(http.DefaultServeMux)        defer server.Close()        resp, err := http.Get(server.URL)        if err != nil {                log.Fatal(err)        }        body, _ := ioutil.ReadAll(resp.Body)        fmt.Println(resp.StatusCode)        fmt.Println(resp.Header.Get("Content-Type"))        fmt.Println(string(body))        // Output:        // 200        // text/plain; charset=utf-8        // OK}但這將導致 404,因為它不知道路由。所以我看到 main_test.go 代碼所做的是在測試文件的 init 中重新設置句柄,如下所示:func init() {    http.HandleFunc("/", sanityTest)}這會導致重復,不可避免地我必須在 main.go 中創建一個函數,例如:func setupRoutes() {        http.HandleFunc("/", sanityTest)}我覺得有點難看。我是否缺少從 main.go 實例化路由并避免 init 的技巧?
查看完整描述

1 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您可以在測試和 main.go 文件之間重復使用路由,如果您想在處理程序中模擬某些內容,這也很有幫助(在router()下面的 func 中添加一個新參數)


主要去:


func sanityTest(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "%s", "sanity test")

}


func router() *http.ServeMux {

    h := http.NewServeMux()

    h.HandleFunc("/", sanityTest)

    return h

}


func main() {

    http.ListenAndServe(":8080", router())

}

main_test.go:


func TestSanity(t *testing.T) {

    tests := []struct {

        name string

        uri  string

        want string

    }{

        {"1", "/", "sanity test"},

    }


    ts := httptest.NewServer(router())

    defer ts.Close()


    for _, tt := range tests {

        t.Run(tt.name, func(t *testing.T) {

            url := ts.URL + tt.uri

            resp, _ := http.Get(url)

            respBody, _ := ioutil.ReadAll(resp.Body)

            resp.Body.Close()


            got := string(respBody)

            if got != tt.want {

                t.Errorf("got %s, Want %s", got, tt.want)

            }

        })

    }

}


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號