Slide 1

Slide 1 text

おーたかこーたろー @otakakot The Go gopher was designed by Renée French. net/http/httptest が推しです♡ 2024.10.23 Go Connect #3

Slide 2

Slide 2 text

The Go gopher was designed by Renée French. みなさんテストはお好きですか?

Slide 3

Slide 3 text

The Go gopher was designed by Renée French. 私はテストが好きです。

Slide 4

Slide 4 text

The Go gopher was designed by Renée French. でもテストコードの保守は嫌いです。

Slide 5

Slide 5 text

The Go gopher was designed by Renée French. だからなるべく書きたくない。

Slide 6

Slide 6 text

The Go gopher was designed by Renée French. そんな私がたどり着いた(と思っている) net/http/httptest をご紹介

Slide 7

Slide 7 text

The Go gopher was designed by Renée French. Kotaro Otaka おーたかこーたろー Web Engineer 新卒入社 Hello Golang! Web Engineer 株式会社ビットキー 2020.04 2021.04 2022.11 @otakakot

Slide 8

Slide 8 text

The Go gopher was designed by Renée French. アジェンダ 01. net/http/httptest との出会い 02. net/http/httptest 03. net/http/httptest (私)の使い方

Slide 9

Slide 9 text

The Go gopher was designed by Renée French. アジェンダ 01. net/http/httptest との出会い 02. net/http/httptest 03. net/http/httptest (私)の使い方

Slide 10

Slide 10 text

The Go gopher was designed by Renée French. net/http/httptest との出会い ● zitadel/oidc にコントリビュートしたとき ● 統合テストで利用    PR: https://github.com/zitadel/oidc/pull/579  Zennの記事: OSSコントリビュートの実績を解除した

Slide 11

Slide 11 text

The Go gopher was designed by Renée French. アジェンダ 01. net/http/httptest との出会い 02. net/http/httptest 03. net/http/httptest (私)の使い方

Slide 12

Slide 12 text

The Go gopher was designed by Renée French. net/http/httptest

Slide 13

Slide 13 text

The Go gopher was designed by Renée French. net/http/httptest ● NewRequest / ( NewRequestWithContext 1.23 で追加 ) ○ リクエストを生成 ○ http.NewRequest と違い戻り値に error がない ● NewRecoder() ○ サーバーのレスポンスを記録 ● NewServer() ○ 空いているポート番号を自動で選択してサーバーを起動

Slide 14

Slide 14 text

The Go gopher was designed by Renée French. アジェンダ 01. net/http/httptest との出会い 02. net/http/httptest 03. net/http/httptest (私)の使い方

Slide 15

Slide 15 text

The Go gopher was designed by Renée French. net/http/httptest (私)の使い方 1. NewRequest + NewRecoder を利用 ➔ 特定の Handler を対象にテスト 2. NewServer を利用 ➔ Client を用いて実際に打鍵しテスト

Slide 16

Slide 16 text

The Go gopher was designed by Renée French. テスト対象の API 入力 ${name} 出力 Hello, ${name}

Slide 17

Slide 17 text

The Go gopher was designed by Renée French. NewRequest + NewRecoder リクエストとレスポンスを作成 Hander の実行 レスポンスの検証 これだとうまく動かない場合がある ※ ※ Zennの記事: httptest.NewRequset で Go 1.22 で追加された PathValue の値を取得する にて解説

Slide 18

Slide 18 text

The Go gopher was designed by Renée French. テスト対象の Handler を登録 httptest によりサーバー起動 後片付け NewServer 準備

Slide 19

Slide 19 text

The Go gopher was designed by Renée French. NewServer ※ スライドの都合でエラーハンドリングは省略 リクエストを作成 クライアントによる打鍵 レスポンスの検証 ※ httptest でリクエストを作ると Client.Do() はエラーとなる

Slide 20

Slide 20 text

The Go gopher was designed by Renée French. いい距離感でテストと付き合っていこうね