# package httptest
`import "net/http/httptest"`
httptest包提供了HTTP測試的常用函數。
## Index
* [Constants](#pkg-constants)
* [type ResponseRecorder](#ResponseRecorder)
* [func NewRecorder() \*ResponseRecorder](#NewRecorder)
* [func (rw \*ResponseRecorder) Header() http.Header](#ResponseRecorder.Header)
* [func (rw \*ResponseRecorder) WriteHeader(code int)](#ResponseRecorder.WriteHeader)
* [func (rw \*ResponseRecorder) Write(buf []byte) (int, error)](#ResponseRecorder.Write)
* [func (rw \*ResponseRecorder) Flush()](#ResponseRecorder.Flush)
* [type Server](#Server)
* [func NewServer(handler http.Handler) \*Server](#NewServer)
* [func NewTLSServer(handler http.Handler) \*Server](#NewTLSServer)
* [func NewUnstartedServer(handler http.Handler) \*Server](#NewUnstartedServer)
* [func (s \*Server) Start()](#Server.Start)
* [func (s \*Server) StartTLS()](#Server.StartTLS)
* [func (s \*Server) CloseClientConnections()](#Server.CloseClientConnections)
* [func (s \*Server) Close()](#Server.Close)
### Examples
* [ResponseRecorder](#example-ResponseRecorder)
* [Server](#example-Server)
## Constants
```
const DefaultRemoteAddr = "1.2.3.4"
```
DefaultRemoteAddr是默認的遠端地址。如果ResponseRecorder未顯式的設置該屬性,RemoteAddr方法就會返回該值。
## type [ResponseRecorder](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#15 "View Source")
```
type ResponseRecorder struct {
Code int // HTTP回復的狀態碼
HeaderMap http.Header // HTTP回復的頭域
Body *bytes.Buffer // 如非nil,會將Write方法寫入的數據寫入bytes.Buffer
Flushed bool
// 內含隱藏或非導出字段
}
```
ResponseRecorder實現了http.ResponseWriter接口,它記錄了其修改,用于之后的檢查。
Example
```
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())
```
Output:
```
500 - something failed
```
### func [NewRecorder](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#25 "View Source")
```
func NewRecorder() *ResponseRecorder
```
NewRecorder返回一個初始化了的ResponseRecorder.
### func (\*ResponseRecorder) [Header](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#38 "View Source")
```
func (rw *ResponseRecorder) Header() http.Header
```
Header返回回復的頭域,即Header字段。
### func (\*ResponseRecorder) [WriteHeader](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#59 "View Source")
```
func (rw *ResponseRecorder) WriteHeader(code int)
```
WriteHeader設置rw.Code。
### func (\*ResponseRecorder) [Write](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#48 "View Source")
```
func (rw *ResponseRecorder) Write(buf []byte) (int, error)
```
Write總是成功,如果rw.Body非nil會把數據寫入該字段。
### func (\*ResponseRecorder) [Flush](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/recorder.go?name=release#67 "View Source")
```
func (rw *ResponseRecorder) Flush()
```
Flush將rw.Flushed設置為真。
## type [Server](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#21 "View Source")
```
type Server struct {
URL string // 格式為http://ipaddr:port,沒有末尾斜杠的基地址
Listener net.Listener
// TLS是可選的TLS配置,在TLS開始后會填寫為新的配置。
// 如果在未啟動的Server調用StartTLS方法前設置,已經存在的字段會拷貝進新配置里。
TLS *tls.Config
// Config可能會在調用Start/StartTLS方法之前調用NewUnstartedServer時被修改。
Config *http.Server
// 內含隱藏或非導出字段
}
```
Server是一個HTTP服務端,在本地環回接口的某個系統選擇的端口監聽,用于點對點HTTP測試。
Example
```
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)
```
Output:
```
Hello, client
```
### func [NewServer](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#82 "View Source")
```
func NewServer(handler http.Handler) *Server
```
NewServer返回一個新的、已啟動的Server。調用者必須在用完時調用Close方法關閉它。
### func [NewTLSServer](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#158 "View Source")
```
func NewTLSServer(handler http.Handler) *Server
```
NewTLSServer返回一個新的、使用TLS的、已啟動的Server。調用者必須在用完時調用Close方法關閉它。
### func [NewUnstartedServer](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#94 "View Source")
```
func NewUnstartedServer(handler http.Handler) *Server
```
NewUnstartedServer返回一個新的、未啟動的Server。在修改其配置后,調用者應該調用Start或StartTLS啟動它;調在用完時用者必須調用Close方法關閉它。
### func (\*Server) [Start](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#102 "View Source")
```
func (s *Server) Start()
```
Start啟動NewUnstartedServer返回的服務端。
### func (\*Server) [StartTLS](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#117 "View Source")
```
func (s *Server) StartTLS()
```
StartTLS啟動NewUnstartedServer函數返回的服務端的TLS監聽。
### func (\*Server) [CloseClientConnections](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#177 "View Source")
```
func (s *Server) CloseClientConnections()
```
CloseClientConnections關閉當前任何與該服務端建立的HTTP連接。
### func (\*Server) [Close](http://code.google.com/p/go/source/browse/src/pkg/net/http/httptest/server.go?name=release#166 "View Source")
```
func (s *Server) Close()
```
Close關閉服務端,并阻塞直到所有該服務端未完成的請求都結束為止。
- 庫
- package achive
- package tar
- package zip
- package bufio
- package builtin
- package bytes
- package compress
- package bzip2
- package flate
- package gzip
- package lzw
- package zlib
- package container
- package heap
- package list
- package ring
- package crypto
- package aes
- package cipher
- package des
- package dsa
- package ecdsa
- package elliptic
- package hmac
- package md5
- package rand
- package rc4
- package rsa
- package sha1
- package sha256
- package sha512
- package subtle
- package tls
- package x509
- package pkix
- package database
- package sql
- package driver
- package encoding
- package ascii85
- package asn1
- package base32
- package base64
- package binary
- package csv
- package gob
- package hex
- package json
- package pem
- package xml
- package errors
- package expvar
- package flag
- package fmt
- package go
- package doc
- package format
- package parser
- package printer
- package hash
- package adler32
- package crc32
- package crc64
- package fnv
- package html
- package template
- package image
- package color
- package palette
- package draw
- package gif
- package jpeg
- package png
- package index
- package suffixarray
- package io
- package ioutil
- package log
- package syslog
- package math
- package big
- package cmplx
- package rand
- package mime
- package multipart
- package net
- package http
- package cgi
- package cookiejar
- package fcgi
- package httptest
- package httputil
- package pprof
- package mail
- package rpc
- package jsonrpc
- package smtp
- package textproto
- package url
- package os
- package exec
- package signal
- package user
- package path
- package filepath
- package reflect
- package regexp
- package runtime
- package cgo
- package debug
- package pprof
- package race
- package sort
- package strconv
- package strings
- package sync
- package atomic
- package text
- package scanner
- package tabwriter
- package template
- package time
- package unicode
- package utf16
- package utf8
- package unsafe