Goのinterfaceを使って外部サービスに依存しないテストを書く #go #golang / mock external service with golang interface

Goのinterfaceを使って外部サービスに依存しないテストを書く #go #golang / mock external service with golang interface

C000f292a92b894afabbb352e8709667?s=128

Toshinori Sugita

May 28, 2018
Tweet

Transcript

  1. Goのinterfaceを使って 外部サービスに依存しないテストを書く 2018/5/28 Gopher道場#1 LT大会 @toshi0607

  2. 自己紹介 • 杉田 寿憲 ◦ Toshinori Sugita ◦ toshi0607 ◦

    toshi0607 ◦ toshi0607 • 最近の様子 ◦ Ruby > JavaScript >>> Go >>>>>> C# • 8月にクロアチア旅行することにした
  3. Goで作り直す.gitignore生成コマンド 2018/5/14 Gopher道場最終回 ※https://speakerdeck.com/toshi0607/reinvent-gitignore-command-using-golang

  4. ※https://github.com/toshi0607/gig before

  5. ※https://github.com/toshi0607/gig before after

  6. 今日のお話 • release-tweeterというAPIを作った • 作ったきっかけ • 課題と解決策 • まとめ

  7. 今日のお話 • release-tweeterというAPIを作った • 作ったきっかけ • 課題と解決策 • まとめ

  8. release-tweeterとは? ※https://github.com/toshi0607/release-tweeter

  9. release-tweeterとは? ※https://github.com/github/release-tweeter

  10. 今日のお話 • release-tweeterというAPIを作った • 作ったきっかけ • 課題と解決策 • まとめ

  11. 作ったきっかけ • コマンドの次はAPI作ってみたい • リリースのお知らせ(twitter)も自動化したい • AWS Lambda(Go)とAPI Gateway使ってみたい

  12. AWS LambdaのGoサポート ※https://twitter.com/awscloud/status/953343724909670400

  13. API GatewayとAWS Lambda

  14. 今日のお話 • release-tweeterというAPIを作った • 作ったきっかけ • 課題と解決策 • まとめ

  15. 課題 CIでテスト回したいけど…

  16. 課題 テストを回すたびにtweet

  17. 前提 • ChimeraCoder/anaconda(第三者のtwitter clientライブラリ)利用 • URLを差し替えたりはできない(たぶん) • このライブラリも投稿はテストしてない ◦ 自分にDMするテストはしてる

    ※https://github.com/ChimeraCoder/anaconda
  18. 解決策①  • 捨てアカ準備

  19. 解決策①  • 捨てアカ準備 すいませんなんでもないです

  20. 解決策② • ライブラリを使わずに再実装

  21. 解決策② • ライブラリを使わずに再実装 便利なライブラリ見つけても再実装...

  22. 解決策③ • 関数だけ差し替える

  23. 解決策③ • 関数だけ差し替える

  24. 解決策③ • 関数だけ差し替える

  25. 解決策③ • 関数だけ差し替える 差し替えたい対象が増えても1つずつ代入...?

  26. 解決策④ • interfaceを活用して差し替える

  27. 解決策④ • interfaceを活用して差し替える

  28. 解決策④ • interfaceを活用して差し替える

  29. 解決策④ • interfaceを活用して差し替える interfaceを満たせば代入可能

  30. ちなみにGitHubでは...

  31. 今日のお話 • release-tweeterというAPIを作った • 作ったきっかけ • 課題と解決策 • まとめ

  32. まとめ テストでは外部サービスに依存せずモックしましょう

  33. ご清聴ありがとうございました! Goのinterfaceを使って 外部サービスに依存しないテストを書く