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

golang/mockでのモック生成と管理の "より良い" アプローチ

F1e600f2c53b0456e0b6c34009d4127e?s=47 sanposhiho
November 13, 2021
710

golang/mockでのモック生成と管理の "より良い" アプローチ

Go Conference 2021 Autumn
https://gocon.jp/2021autumn/

F1e600f2c53b0456e0b6c34009d4127e?s=128

sanposhiho

November 13, 2021
Tweet

Transcript

  1. Kensei Nakada @sanposhiho
 golang/mockでのモック生成と管理の "より 良い" アプローチ


  2. 中田 健誠 / Kyoto Uni (4th year)
 普段はバックエンドエンジニアをしてます
 
 Twitter:

    さんぽし (@sanpo_shiho)
 GitHub: @sanposhiho
 
 自己紹介

  3. golang/mock(GoMock)とは


  4. golang/mock(GoMock)とは
 > GoMock is a mocking framework for the Go

    programming language.
 
 Go の公式Orgで開発されている”モックのためのフレームワーク”

  5. GoMockに関する詳しい話
 このトークでは細かい使用方法は
 扱いません。
 
 詳しくはZennの記事を🙏 → 


  6. Kensei Nakada @sanposhiho
 golang/mockでのモック生成と管理の "より 良い" アプローチ


  7. GoMock でのモック生成
 mockgenコマンドを使用してinterfaceを元にモックを生成する


  8. GoMockでのモック生成
 mockgenコマンドを使用してinterfaceを元にモックを生成する
 


  9. GoMock でのモック生成
 interfaceを元にモックを生成する
 → interfaceが更新されるとモックを再生成(更新)する必要がある


  10. GoMock でのモック生成
 interfaceを元にモックを生成する
 → interfaceが更新されるとモックを再生成(更新)する必要がある
 → mockgenコマンドをどこかに置いておく必要がある


  11. go generateでのGoMock管理
 go generateを用いて、管理されることが多い。
 
 ↓のように書いておいて で全mockgenを一斉に実行
 


  12. go generateでのGoMock管理
 この管理方法だといくつかの解決できない問題が存在する
 
 • はコマンドが一つ一つ実行される = 時間がかかる…
 • は常に全てのmockgenを実行する


    • モックが最新のインターフェースを元に生成されているかわからない

  13. sanposhiho/gomockhandler


  14. gomockhandler
 go generate以外でのGoMockのモック管理を目指したライブラリ
 
 一つのファイルを通してプロジェクト内の全てのモックの管理を行う。


  15. モックの生成の効率化①
 gomockhandlerではモックを並行に生成している。
 
 この効率化施策のみで、複数のモックの生成が50~60%早くなる(雑な計測)


  16. モックの生成の効率化②
 
 更新の必要がないモックの生成を自動でスキップする
 = 不必要なモックの生成は実行されない
 (※ Source modeのみ対応)
 
 例)

    
 interface A, Bのみを更新 → A, Bのためのモックの更新のみが実行される

  17. モックが最新かどうか確認
 モックが最新のインタフェースを元に生成されているかを確認できる
 CIなどで使用することでモックの更新忘れを防ぐことができる


  18. 「使ってみたいけど、移行めんどくさそう」🤔


  19. go generate管理からの移行の容易性
 go generateでのGoMock管理から簡単に移行できるようにデザイン
 
 プロジェクト内のgo generateを全て
 mockgen    gomockhandler

    -config=/path/to/config.json
 に置換するだけでgomockhandlerへの移行が完了する。 

  20. ご静聴ありがとうございました 
 20