Golang httptest 服务器循环依赖

我想为一个函数编写一个测试

  1. 向 url1 发出 Get 请求,该请求检索 url2

  2. 向 url2 发起 Get 请求,并返回结果

但是我不确定如何模拟 url2 的返回值,因为我无法在服务器启动之前获取 server.URL。但是在服务器启动后我无法更改处理程序。例如,运行下面给出错误Get /url2: unsupported protocol scheme ""

package main


import (

    "fmt"

    "io/ioutil"

    "net/http"

    "net/http/httptest"

)


func myFunc(client *http.Client, url1 string) string {

    url2 := get(client, url1)

    return get(client, url2)

}


func get(client *http.Client, url string) string {

    resp, err := client.Get(url)

    if err != nil {

        fmt.Println(err)

    }

    body, err := ioutil.ReadAll(resp.Body)

    defer resp.Body.Close()

    if err != nil {

        fmt.Println(err)

    }

    return string(body)

}


// test myFunc

func main() {

    srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        switch r.URL.String() {

        case "/url1":

            w.Write([]byte("/url2")) // how to specify srv.URL+"/url2" here?

        case "/url2":

            w.Write([]byte("return data"))

        }

    }))

    defer srv.Close()


    myFunc(srv.Client(), srv.URL+"/url1")

}


来源:https ://onlinegdb.com/UpKlXfw45


繁星淼淼
浏览 100回答 1
1回答

慕桂英3389331

在使用变量之前声明 srv 变量。var srv *httptest.Serversrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {    switch r.URL.String() {    case "/url1":        w.Write([]byte(srv.URL + "/url2"))     case "/url2":        w.Write([]byte("return data"))    }}))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go