美文网首页
golang如何构造http.ResponseWriter和ht

golang如何构造http.ResponseWriter和ht

作者: CodingCode | 来源:发表于2021-08-31 08:04 被阅读0次

在做测试的时候,需要模拟HTTP server的handle函数直接调用:
就不用通过发送curl命令,而是直接调用handler函数的方式;这样就需要手动构造出一个http.ResponseWriter和http.Request,然后调用Handler函数。


var w http.ResponseWriter = ...
var r *http.Request = ...

Handler(w, r)

好在golang自带的"net/http/httptest"包就有这个功能:

    dataStruct := go-data-type
    b, _ := json.Marshal(dataStruct)

    url := "https://localhost:8080/v1/instance"
    r := httptest.NewRequest(http.MethodPut, url, bytes.NewReader(b))
    w := httptest.NewRecorder()
    Handler(w, r)

    resp := w.Result()
    body, _ := ioutil.ReadAll(resp.Body)

    log.Println("response.Status:", resp.StatusCode)
    log.Println("response.Body: ", string(body))

如果使用"github.com/gorilla/mux"的router包想使用Vars可以这么设置:

    r := httptest.NewRequest(http.MethodPut, url, bytes.NewReader(b))
    vars := map[string]string { "id": id_var }
    r = mux.SetURLVars(r, vars)

然后在Handler函数里,就能使用:

func Handler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    id := vars["id"]
}

相关文章

网友评论

      本文标题:golang如何构造http.ResponseWriter和ht

      本文链接:https://www.haomeiwen.com/subject/pewailtx.html