Go - 如何使用http.NewRequest进行测试

时间:2014-10-12 01:17:09

标签: go

我已经获得了测试http请求的代码:

func TestAuthenticate(t *testing.T) {
    api := &ApiResource{}
    ws := new(restful.WebService)
    ws.Consumes(restful.MIME_JSON, restful.MIME_XML)
    ws.Produces(restful.MIME_JSON, restful.MIME_JSON)
    ws.Route(ws.POST("/login").To(api.Authenticate))
    restful.Add(ws)

    bodyReader := strings.NewReader("<request><Username>42</Username><Password>adasddsa</Password><Channel>M</Channel></request>")

    httpRequest, _ := http.NewRequest("POST", "/login", bodyReader)
//  httpRequest.Header.Set("Content-Type", restful.MIME_JSON)
    httpRequest.Header.Set("Content-Type", restful.MIME_XML)
    httpWriter := httptest.NewRecorder()

    restful.DefaultContainer.ServeHTTP(httpWriter, httpRequest)
}

我尝试将json用作具有相同NewReader的字符串,并尝试将struct与json.Marshal一起使用。

它们都不起作用。

是否有一种方法可以为bodyReader的有效第三个参数编码http.NewRequest

与JSON中NewReader的输入类似的请求是:

bodyReader := strings.NewReader("{'Username': '12124', 'Password': 'testinasg', 'Channel': 'M'}")

结构字段是: Username, Password, Channel

1 个答案:

答案 0 :(得分:1)

JSON无效。 JSON使用"来引用字符串,而不是'

使用以下代码行创建请求正文:

bodyReader := strings.NewReader(`{"Username": "12124", "Password": "testinasg", "Channel": "M"}`)

我使用了raw string literal来避免引用JSON文本中的"