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


    View full-size slide

  2. matryer/moq とは

    ● 任意の interface からモック構造体を生成するツール


    ● golang/gomock と扱う課題は同じ


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


    View full-size slide

  3. 使ってみる

    ● moq -out {生成ファイル名} {ソースディレクトリ} {interface 名} 

    でモックを生成できる


    ● go generate で生成してみる


    View full-size slide

  4. 使ってみる

    生成された


    View full-size slide

  5. 使ってみる

    ● モックを使って

    テストを書いてみる


    ● 生成された struct に

    関数を渡すシンプルな仕様


    ● HelloFunc が Hello()

    呼び出し時に実行される


    View full-size slide

  6. 使ってみる

    ● 関数を定義していない状態で

    関数を呼び出すと panic した


    View full-size slide

  7. golang/gomock と比べて

    何が良いのか


    View full-size slide

  8. 生成されたモックが引数、戻り値の型情報を持ってる

    gomock は interface{} で定義されてしまう

    対象 interface の型を確認する必要があり面倒


    View full-size slide

  9. 前処理が無い

    gomock は モックに gomock.Controller を渡す必要がある

    テスト毎にこの処理を書く必要があるため面倒


    View full-size slide

  10. gomock が優れている点

    ● 引数ごとに処理を定義できる









    引数を検証する処理(reflect.DeepEqual等)

    を書く必要がない


    View full-size slide

  11. gomock が優れている点

    ● 関数が呼び出されるべき回数の指定が簡単にできる

    最少のみ設定、など結構色々できる

    (あんまり使ったことない)










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


    View full-size slide

  12. まとめ


    ● moq は引数、戻り値の型情報を持った

    モックが作られる


    ● gomock は コントローラーを作成する前処理が必須

    対して moq は前処理を書く必要が無い

    ● gomock は引数の検証や、関数呼び出し回数の指定を 

    したい場合楽できる


    View full-size slide

  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

    View full-size slide