为了账号安全,请及时绑定邮箱和手机立即绑定

如何模拟多个 url 以返回夹具内容?

如何模拟多个 url 以返回夹具内容?

Go
至尊宝的传说 2022-05-18 14:12:41
我正在编写某种递归解析器。最简单的形式是:取自all links的first link页面正文对每个链接重复第一步所以现在我想测试它。问题是我想不出模拟所有这些页面的最佳方法。我使用http包,并且我已经使用httptest包(通过httptest.NewServer)编写了一些测试。但现在对我的任务似乎没有用。我想最好的方法是使用http.Client自定义Transport结构,但它有很多样板和额外的臭代码。有没有更优雅的方法来做到这一点?
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我曾多次使用自定义Transport来测试客户。通常我会创建一些辅助类型和函数来减少样板代码。


这样的事情可能是一个开始。


package main


import (

    "bytes"

    "fmt"

    "io"

    "io/ioutil"

    "net/http"

    "os"

)


type roundTripFunc func(*http.Request) (*http.Response, error)


func (r roundTripFunc) RoundTrip(req *http.Request) (resp *http.Response, err error) {

    return r(req)

}


func main() {

    c := &http.Client{

        Transport: roundTripFunc(func(req *http.Request) (resp *http.Response, err error) {

            return &http.Response{

                StatusCode: 200,

                Body:       ioutil.NopCloser(bytes.NewBufferString("test")),

            }, nil

        }),

    }


    r, _ := c.Get("/")

    fmt.Printf("%#v\n", r)

    io.Copy(os.Stdout, r.Body)

}

例如,如果您测试 JSON API 客户端,您可以制作一个往返帮助函数来处理解码、编码、标头等。在您的情况下,也许您可以将往返函数映射主机标头和 URL 路径到文件固定路径?


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信