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

シンプルなモック生成ツール matryer/moq 使ってみた

uji
May 31, 2021

シンプルなモック生成ツール matryer/moq 使ってみた

uji

May 31, 2021
Tweet

More Decks by uji

Other Decks in Technology

Transcript

  1. シンプルなモック生成ツール
 matryer/moq 使ってみた
 uji @uji_rb


  2. matryer/moq とは
 • 任意の interface からモック構造体を生成するツール
 
 • golang/gomock と扱う課題は同じ


    
 • golang/gomock よりシンプルな仕様

  3. 使ってみる
 • moq -out {生成ファイル名} {ソースディレクトリ} {interface 名} 
 でモックを生成できる


    
 • go generate で生成してみる

  4. 使ってみる
 生成された


  5. 使ってみる
 • モックを使って
 テストを書いてみる
 
 • 生成された struct に
 関数を渡すシンプルな仕様


    
 • HelloFunc が Hello()
 呼び出し時に実行される

  6. 使ってみる
 • 関数を定義していない状態で
 関数を呼び出すと panic した


  7. golang/gomock と比べて
 何が良いのか


  8. 生成されたモックが引数、戻り値の型情報を持ってる
 gomock は interface{} で定義されてしまう
 対象 interface の型を確認する必要があり面倒


  9. 前処理が無い
 gomock は モックに gomock.Controller を渡す必要がある
 テスト毎にこの処理を書く必要があるため面倒


  10. gomock が優れている点
 • 引数ごとに処理を定義できる
 
 
 
 
 
 


    
 
 引数を検証する処理(reflect.DeepEqual等)
 を書く必要がない

  11. gomock が優れている点
 • 関数が呼び出されるべき回数の指定が簡単にできる
 最少のみ設定、など結構色々できる
 (あんまり使ったことない)
 
 
 
 


    
 
 
 
 
 moq でもモック関数で処理を実装すればできる

  12. まとめ
 
 • moq は引数、戻り値の型情報を持った
 モックが作られる
 
 • gomock は

    コントローラーを作成する前処理が必須
 対して moq は前処理を書く必要が無い
 • gomock は引数の検証や、関数呼び出し回数の指定を 
 したい場合楽できる

  13. 参考
 • moq - gomockを使わないMock生成 (@oinume) https://journal.lampetty.net/entry/moq-instead-of-gomock • Meet Moq:

    Easily mock interfaces in Go (Mat Ryer) https://medium.com/@matryer/meet-moq-easily-mock-interfaces-in-go-476444187d10