Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

API GatewayとAWS Lambda

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

解決策①  ● 捨てアカ準備

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

ちなみにGitHubでは...

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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