我正试图用gotest和gomock编写一个单元测试,然后用gomock编写到我用golang编写的、使用大猩猩的restful服务,但是服务无法从url中获取变量。
这是我的要求
req, err := http.NewRequest("GET", "product/5b5758f9931653c36bcaf0a0", nil)实际端点是product/{id}
当我在下面的代码中进入服务时
params := mux.Vars(req)当应该将params键映射到5b5758f9931653c36bcaf0a0时,id映射为空
奇怪的部分是端点工作良好,从邮递员。
,我能知道请求有什么问题吗?
发布于 2018-07-30 16:18:09
这解决了这个问题。
req = mux.SetURLVars(req, map[string]string{"id": "5b5758f9931653c36bcaf0a0"})发布于 2018-07-25 19:08:33
由于您使用的是GET请求,所以可以使用http.Get函数,它的工作方式与预期的一样:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func handle(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
fmt.Println(params)
}
func main() {
m := mux.NewRouter()
m.HandleFunc("/products/{id}", handle)
http.Handle("/", m)
go func() {
http.ListenAndServe(":8080", nil)
}()
_, err := http.Get("http://localhost:8080/products/765")
// Handle Error
}如果您真的想使用http.NewRequest,那么该函数实际上不会执行请求,因此您需要如下所示:
req, err := http.NewRequest("GET", "product/5b5758f9931653c36bcaf0a0", nil)
client := &http.Client{}
client.Do(req)发布于 2020-01-22 06:20:59
在源代码中的一个单独函数中创建mux路由器,并在测试中直接调用它。
源代码:
func Router() *mux.Router {
r := mux.NewRouter()
r.HandleFunc("/product/{id}", productHandler)
return r
}
func main() {
http.Handle("/", Router())
}测试中:
func TestProductHandler(t *testing.T) {
r := http.NewRequest("GET", "product/5b5758f9931653c36bcaf0a0", nil)
w := httptest.NewRecorder()
Router().ServeHTTP(w, r)
}在谷歌集团论坛中找到了相关的解决方案。oJ
https://stackoverflow.com/questions/51521868
复制相似问题