$30 off During Our Annual Pro Sale. View Details »

Golangで始めるAPIの単体テスト

Makoto "dave" Nakai
July 06, 2022
140

 Golangで始めるAPIの単体テスト

Let's Go Talk #1 (GoのLT会)での発表です

Makoto "dave" Nakai

July 06, 2022
Tweet

Transcript

  1. Golangではじめる APIの単体テスト 中井慎@Let's Go Talk #1

  2. 自己紹介 中井 慎 (なかい まこと) 慶應義塾大学政策メディア研究科 修士1年 インフラエンジニアインターン@ガイアックス GitHub: https://github.com/MakotoNakai

    フロントエンド: React.js Vue.js バックエンド: Ruby on Rails Flask Echo 基盤開発: Docker Kubernetes
  3. Golangでwebサービス開発してます 使いやすい自動日程調整サービス lets-schedule 主催者 参加者 最適な時間 最適な時間 空いてる時間 空いてる時間 解決したい問題

    1. 提案された時間枠の O/△/X のリアクションがめんどくさ い 2. Gmail・Outlookユーザーし か自動日程調整機能が使 えない Golangを採用した理由 1. 記法がシンプル 2. パフォーマンスが良さ 3. ビルド・デプロイも高速
  4. 皆さん  テストコード 書いてますか?

  5. テストとの遭遇 mixiのインターンの技術面接にて (先週の話 ちなみに通った) テストコード書いたことあ る? ないっす (QAみたいに実装の後に やるものだと思ってた )

    普通API実装した時に書くよ マジっすか!?
  6. Webサービスのテストはこんなものがあります • 単体テスト ◦ アプリケーションの機能単体の動作確認 ◦ 例:API単体の動作確認 • 結合テスト ◦

    アプリケーションのサブシステムの動作確認 • E2Eテスト ◦ アプリケーション全体の動作確認
  7. 単体テストのやり方 • 正常なテストケース ◦ APIに仕様通りの値を入力する ◦ 正常なHTTPレスポンスが返ってくることを確認する • 異常なテストケース ◦

    APIに仕様通りでない値を入力する (例: 数字の欄に文字列を入れる ) ◦ 正常でないHTTPレスポンスが返ってくることを確認する
  8. APIテストに使えるGoライブラリ • testing ◦ Golangの標準ライブラリ ◦ go testコマンドでテストを自動実行できる • net/httpのhttptestサブパッケージ

    ◦ httpリクエストをテストできる • testify ◦ assert文 (想定値と返り値が一致することを確認するコマンド ) が使える ◦ mockデータが定義できる • webフレームワークごとにメソッドが用意されている場合もある
  9. 例 localhostサーバーのエンドポイント( / )にアクセスすると ステータスコード200と{“Hello”: “World”}を返すAPIを作りたい 参照リンク: Golang Testing — JSON

    Responses with Gin - Craig Childs https://craig-childs.medium.com/testing-gin-json-responses-1f258ce3b0b1 (参照日時: 2022年7月6日)
  10. コード

  11. 確認すべきこと • ステータスコード200が返ってくる • エラーがnil (エラーが発生しない) • 値が存在する • 値が”world”と一致

  12. 単体テストのコード

  13. テストの実行結果 無事成功!

  14. まとめ • テストコードは大事 • testing・httptest・testifyでAPIの単体テストが書ける