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

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

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

Toshinori Sugita

May 28, 2018
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

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

    View Slide

  2. 自己紹介
    ● 杉田 寿憲
    ○ Toshinori Sugita
    ○ toshi0607
    ○ toshi0607
    ○ toshi0607
    ● 最近の様子
    ○ Ruby > JavaScript >>> Go >>>>>> C#
    ● 8月にクロアチア旅行することにした

    View Slide

  3. Goで作り直す.gitignore生成コマンド
    2018/5/14 Gopher道場最終回
    ※https://speakerdeck.com/toshi0607/reinvent-gitignore-command-using-golang

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. API GatewayとAWS Lambda

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. 解決策① 
    ● 捨てアカ準備

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide