Upgrade to Pro — share decks privately, control downloads, hide ads and more …

最近Goで作っているツールたちを晒します!

 最近Goで作っているツールたちを晒します!

Gopher道場#3 LT大会での発表資料です。Youtubeのtranscript取得、テストの際のHTTP Serverのモックの方法について話しました。

Tatsunori Sunagawa

September 23, 2018
Tweet

More Decks by Tatsunori Sunagawa

Other Decks in Programming

Transcript

  1. net/http/httptest func TestCmd_Run(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter,

    r *http.Request) { switch r.URL.String() { case "/timedtext?lang=en&name=test_en&v=test0001": w.Header().Set("content-Type", "text/xml") fmt.Fprintf(w, transcriptXML) return case "/timedtext?lang=en&name=test_en&v=test0003": ... } }, )) defer ts.Close() youtubets.Domain = ts.URL
  2. net/http/httptest func TestCmd_Run(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter,

    r *http.Request) { switch r.URL.String() { case "/timedtext?lang=en&name=test_en&v=test0001": w.Header().Set("content-Type", "text/xml") fmt.Fprintf(w, transcriptXML) return case "/timedtext?lang=en&name=test_en&v=test0003": ... } }, )) defer ts.Close() youtubets.Domain = ts.URL HandlerFuncを登録して Serverを立ち上げる
  3. net/http/httptest func TestCmd_Run(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter,

    r *http.Request) { switch r.URL.String() { case "/timedtext?lang=en&name=test_en&v=test0001": w.Header().Set("content-Type", "text/xml") fmt.Fprintf(w, transcriptXML) return case "/timedtext?lang=en&name=test_en&v=test0003": ... } }, )) defer ts.Close() youtubets.Domain = ts.URL リクエストが来たURLでハンドリングして、レス ポンスを返す ※transscriptXMLはXML文字列を持っている
  4. net/http/httptest func TestCmd_Run(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter,

    r *http.Request) { switch r.URL.String() { case "/timedtext?lang=en&name=test_en&v=test0001": w.Header().Set("content-Type", "text/xml") fmt.Fprintf(w, transcriptXML) return case "/timedtext?lang=en&name=test_en&v=test0003": ... } }, )) defer ts.Close() youtubets.Domain = ts.URL ts.URLのドメインにリクエストするようにする これにより、API Serverを入れ替えられる
  5. net/http/httptest func TestCmd_Run(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter,

    r *http.Request) { switch r.URL.String() { case "/timedtext?lang=en&name=test_en&v=test0001": w.Header().Set("content-Type", "text/xml") fmt.Fprintf(w, transcriptXML) return case "/timedtext?lang=en&name=test_en&v=test0003": ... } }, )) defer ts.Close() youtubets.Domain = ts.URL Getパラメータの順序違ったら 別のURLと認識されるけど大丈夫?