golang如何构造http.ResponseWriter和http.Request

在做测试的时候,需要模拟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"]
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容