在做测试的时候,需要模拟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"]
}
网友评论