LoginSignup
0
1

More than 1 year has passed since last update.

【Goのhttptestでtestを書くにあたって学んだこと】

Posted at

大まかなテストの流れ

  • 擬似リクエストを作る
  • レスポンスを受け取るRecorderを作る
  • アサーションで結果を比較する。

以下記事よりstatusCodeとhttptestの値を確認した。

http.StatusCreated === 201

net/httpとfasthttpの対応表 - Qiita

疑似リクエスト作成方法

httptest.NewRequest(
 	http.MethodPost, // 形式
 	"/user",  // エンドポイント
 	bytes.NewBuffer([]byte(body)) // 引数に必要ならいれる、不要ならnil(body)
)
// 第3引数はio.Reader型である。
func NewRequest(method, url string, body io.Reader) (*Request, error) {
 	return NewRequestWithContext(context.Background(), method, url, body)
}

io.Reader型とは?

バイト列を読み出すためのインターフェース

// 具体的なio.Reader interface
// たったこれだけ。
type Reader interface {
    Read(p []byte) (n int, err error)
}

// bytes.Buffer型はio.Reader型とio.Writer型を満たす
// Buffer構造体はReadメソッド、Writeメソッドを持っている。
	// WriteメソッドはBuffer自らのbyteに書き込むためのメソッド
	// ReadメソッドはBuffer自らのbyteを読み取るためのメソッド
func Buffer struct {
		byte []
}
func (r *Buffer) Write(x) {
		r.byte = x
}
func (r *Buffer) Read(x)(Buffer){
		return r.byte
}

jsonへのEncodeをstream処理で行う

e := json.NewEncoder(w) // w = io.Writer
data := map[string]interface{}{
		"name": "example",
		"email":  "example@gmail.com",
	}
e.Encode(data)

encodeしたデータで新しいリクエストを作成する

// NewRequestに渡すio.Reader型を持った変数を定義する
// bytes.Bufferやbufio.Readerなどがあるので適当に作って渡せばいい
var buf bufio.Reader 
req := httptest.NewRequest(http.~, "エンドポイント", &buf)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1