dousao8152 2019-06-18 09:32
浏览 188
已采纳

使用github.com/jarcoal/httpmock验证请求正文

The function I am trying to test accepts data structs, forms a query_dsl and then makes a /_search call to elastic search with the formed query. Hence I want to assert on the query_dsl and url which gets formed.

I am using github.com/jarcoal/httpmock to mock net/http requests in my unit tests. As per the doc it exposes func GetCallCountInfo() map[string]int to validate how many times a particular endpoint was hit. But I am also interested in knowing what was the request body when this call was made.

http.Client is not exposed, hence can not override/mock that for testing.

If it is not possible using this package then is there any other library which can mock the network request and also gives hold of request body?

  • 写回答

1条回答 默认 最新

  • dsmlf1207915 2019-06-19 03:26
    关注

    Following @georgeok Suggestion, We can create a mock http server and capture the request body when request is made. Following is the code snippet to create a server and store the request body.

    server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
            actualRequestBody, err = ioutil.ReadAll(req.Body)
            check(err)
            // Send mock response to be tested
            _, err := rw.Write(bytes)
            check(err)
        }))
    
        defer server.Close()
    

    Now our request body is stored on actualRequestBody variable, and we can assert on this for correctness.

    The only thing necessary to make sure this works is to make the call at host server.URL. As it spins up a server on the address mentioned at server.URL. So if the call from your code is being made to different server this will not catch it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?