首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用httptest服务多个处理程序以模拟多个请求

使用httptest服务多个处理程序以模拟多个请求
EN

Stack Overflow用户
提问于 2018-07-10 09:28:12
回答 2查看 3.2K关注 0票数 7

我已经用谷歌搜索过了,但是什么也没找到。

我有一个接受http.Client的结构,它发送几个GET请求。在我的测试中,我想模拟响应,这样它就不会发送真正的请求。

目前,我已经想出了如何只处理一个请求,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
     ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http.StatusOK)
        file, err := os.Open("./testdata/1.html")
        if err != nil {
            t.Error(err)
        }
        bytes, err := ioutil.ReadAll(file)
        if err != nil {
            t.Error(err)
        }
        w.Write(bytes)
    }))

   ts.Client() // Now I can inject this client into my struct.

因此,一旦模拟了响应,且http客户端执行了一个新请求,我的测试就会在那之后发送出真正的请求。

如何允许多个处理程序,以便在调用http.Client.Get(...)时模拟几个响应

EN

回答 2

Stack Overflow用户

发布于 2019-08-15 17:48:51

由于原始问题使用httptest.NewServer -您可以在httptest.Server函数上注册一个ServeMux,然后您可以向该多路复用器添加几个路由:

代码语言:javascript
代码运行次数:0
运行
复制
mux := http.NewServeMux()

mux.HandleFunc("/someroute/", func(res http.ResponseWriter, req *http.Request) {
    ...do some stuff...
})
mux.HandleFunc("/someotherroute/", func(res http.ResponseWriter, req *http.Request) {
    ...do other stuff...
})

ts := httptest.NewServer(mux)
defer ts.Close()
票数 6
EN

Stack Overflow用户

发布于 2018-07-10 18:28:33

in this example一样,ServeMux.Handle可以用来设置服务器来处理多个请求。

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
    "log"
    "net/http"
)

const addr = "localhost:12345"

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/hello", HandleHello)
    // other handlers can be assigned to separate paths
    log.Printf("Now listening on %s...\n", addr)
    server := http.Server{Handler: mux, Addr: addr}
    log.Fatal(server.ListenAndServe())
}

func HandleHello(w http.ResponseWriter, r *http.Request) {
    log.Printf("Hello!")
}

但老实说,您可能只想将您创建的接口背后的http.Client抽象出来,然后用一个返回您想要的东西的测试实现将其存根。通过这样做,您可以避免测试中的http通信开销。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51256080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档