正确使用httptest模拟响应

时间:2016-06-13 17:19:02

标签: unit-testing go

我有一些看起来像这样的东西:

func (client *MyCustomClient) CheckURL(url string, json_response *MyCustomResponseStruct) bool {
     r, err = http.Get(url)
     if err != nil {
         return false
     }
     defer r.Body.Close()
     .... do stuff with json_response

在我的测试中,我有以下内容:

  func TestCheckURL(t *test.T) {
       ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
           w.Header().Set("Content-Type", "text/html; charset=UTF-8")
           fmt.Fprintln(w, `{"status": "success"}`)
       }))
       defer ts.Close()

       json_response := new(MyCustomResponseStruct)
       client := NewMyCustomClient()  // returns instance of MyCustomClient
       done := client.CheckURL("test.com", json_response)

然而,似乎HTTP测试服务器没有工作,并且实际上它已经发送到test.com,如日志输出所示:

 Get http:/test.com: dial tcp X.Y.Z.A: i/o timeout

我的问题是如何正确使用httptest包来模拟这个请求...我通读了the docs这个有用的SO Answer但我还是卡住了。

1 个答案:

答案 0 :(得分:4)

您的客户端只调用您提供的URL作为var map = 1; var count = 0; while (map <= North_West) { if( ((int)Value & map) > 0) count += 1; map = map << 1; //left shift, a.k.a. multiply by 2 } 方法的第一个参数。为您的客户端提供测试服务器的URL:

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        scanf("%c",&arr[i][j]);
        getchar();
    }
}