...

Package httptest

import "net/http/httptest"
概览
索引
示例

概览 ▾

httptest 包提供HTTP测试的单元工具.

常量

const DefaultRemoteAddr = "1.2.3.4"

DefaultRemoteAddr是RemoteAddr返回的默认远端地址。如果没有对ResponseRecorder做地址设置的话, DefaultRemoteAddr就作为默认值。

type ResponseRecorder

type ResponseRecorder struct {
    Code      int           // the HTTP response code from WriteHeader  // 为WriteHeader回复的code
    HeaderMap http.Header   // the HTTP response headers  // HTTP回复的头
    Body      *bytes.Buffer // if non-nil, the bytes.Buffer to append written data to  // 如果是非空,bytes.Buffer要将数据写到这里面
    Flushed   bool
    // contains filtered or unexported fields
}

ResponseRecorder是http.ResponseWriter的具体实现,它为进一步的观察记录下了任何变化。

示例

代码:

handler := func(w http.ResponseWriter, r *http.Request) {
    http.Error(w, "something failed", http.StatusInternalServerError)
}

req, err := http.NewRequest("GET", "http://example.com/foo", nil)
if err != nil {
    log.Fatal(err)
}

w := httptest.NewRecorder()
handler(w, req)

fmt.Printf("%d - %s", w.Code, w.Body.String())

输出:

500 - something failed

func NewRecorder

func NewRecorder() *ResponseRecorder

NewRecorder返回一个初始化的ResponseRecorder。

func (*ResponseRecorder) Flush

func (rw *ResponseRecorder) Flush()

Flush将rw.Flushed设置为true。

func (*ResponseRecorder) Header

func (rw *ResponseRecorder) Header() http.Header

Header返回回复的header。

func (*ResponseRecorder) Write

func (rw *ResponseRecorder) Write(buf []byte) (int, error)

Write总是返回成功,并且如果buf非空的话,它会写数据到rw.Body。

func (*ResponseRecorder) WriteHeader

func (rw *ResponseRecorder) WriteHeader(code int)

WriteHeader设置rw.Code

type Server

type Server struct {
    URL      string // base URL of form http://ipaddr:port with no trailing slash  // 基本的http://ipaddr:port的URL样式。没有进行尾部删减。
    Listener net.Listener

    // TLS is the optional TLS configuration, populated with a new config
    // after TLS is started. If set on an unstarted server before StartTLS
    // is called, existing fields are copied into the new config.
    //
    // TLS 为可选的 TLS 配置,它在 TLS 启动后,与新的配置一起构成。若在 StartTLS
    // 被调用前设置了一个未启动的服务,既有的字段就会被复制为新的配置。
    TLS *tls.Config

    // Config may be changed after calling NewUnstartedServer and
    // before Start or StartTLS.
    //
    // Config可能在调用NewUnstartedServer之后或者在Start和StartTLS之前被改变。
    Config *http.Server
    // contains filtered or unexported fields
}

Server 是一个HTTP服务,它在系统选择的端口上监听请求,并且是在本地的接口监听, 它完全是为了点到点的HTTP测试而出现。

示例

代码:

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, client")
}))
defer ts.Close()

res, err := http.Get(ts.URL)
if err != nil {
    log.Fatal(err)
}
greeting, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s", greeting)

输出:

Hello, client

func NewServer

func NewServer(handler http.Handler) *Server

NewServer开启并且返回一个新的Server。 调用者应该当结束的时候调用Close来关闭Server。

func NewTLSServer

func NewTLSServer(handler http.Handler) *Server

NewTLSServer 开启并且返回了一个使用TLS的新的Server。 调用者应该在结束的时候调用Close来关闭它。

func NewUnstartedServer

func NewUnstartedServer(handler http.Handler) *Server

NewUnstartedServer返回一个新的Server实例,但是并不启动这个Server。

在改变了配置之后,调用者应该调用Start或者StartTLS。

调用者应该在结束之后调用Close来关闭Server。

func (*Server) Close

func (s *Server) Close()

Close关闭server并且阻塞server,知道所有的请求完成之后才继续。

func (*Server) CloseClientConnections

func (s *Server) CloseClientConnections()

CloseClientConnections关闭任何现有打开的HTTP连接到测试服务器上。

func (*Server) Start

func (s *Server) Start()

Start开启从NewUnstartedServer获取到的server。

func (*Server) StartTLS

func (s *Server) StartTLS()

StartTLS开启从NewUnstartedServer获取到的server的TLS。