From Tokyo, Japan. Web-Developer. Write some codes by Go/Scala And thanks everything around my self.

mockgenのリフレクトモードの使い方

mockgenのリフレクトモードの使い方

この記事はGoアドベントカレンダーの何日目の記事でもありません

はじめに

Goには、テストをするときに有用なGoMockというパッケージがあり、mockgenを利用することでInterfaceのモックを作成できることは皆さんご存知だと思いますが、使い方を日本語でググったときに、こういう使い方しか出てきてない気がします。

mockgen -source models/hogehoge/interface.go -destination test/mocks/mock_hogehoge.go

こんな感じ

これは「ソースモード」と呼ばれるmockgenの呼び出し方法なんですが、mockgenの通常モードは「リフレクトモード」というものなのですが、意外とリフレクトモードで呼び出しているような日本語の記事をあまりお見かけしない気がするので、今回は通常モードである「リフレクトモード」について書きます。

 

使い方(リフレクトモード)

リフレクトモードでの使い方は、ソースモードより多分簡単です

Mockを作りたいパッケージ: mocktest Mockを作りたいIntefaceのディレクトリ: mocktest/model/fuga/interface.go Mockを作りたいInterface: Fugar

上記とした場合に、実行するコマンドの様式は以下のようになります

mockgen {モックを作りたいインターフェースの親パッケージ} { モックを作りたいインターフェース}
mockgen mocktest/model/fuga Fugar

となります。 ただ、このままですと処理結果は標準出力に出てくるだけなので

Mockファイルを配置したいディレクトリ: mocktest/test/mocks/mock_fuga.go

とした場合には、以下のようにします

mockgen -package mocks -destination mocktest/test/mocks/mock_fuga.go mocktest/model/fuga Fugar

-packageは作成するモックファイルのパッケージの指定、-destinationは結果の出力先となります。

まぁ単に、上記はmockgenコマンドだけ実行したときにヘルプで表示されるので、皆さん知ってたらそれで大丈夫なのですが、ソースモードしか知らない方がいらっしゃって、その方のためになったら良いなと思います。

最後にヘルプ文言貼っておきます

mockgen has two modes of operation: source and reflect.

Source mode generates mock interfaces from a source file.
It is enabled by using the -source flag. Other flags that
may be useful in this mode are -imports and -aux_files.
Example:
    mockgen -source=foo.go [other options]

Reflect mode generates mock interfaces by building a program
that uses reflection to understand interfaces. It is enabled
by passing two non-flag arguments: an import path, and a
comma-separated list of symbols.
Example:
    mockgen database/sql/driver Conn,Driver

  -aux_files string
        (source mode) Comma-separated pkg=path pairs of auxiliary Go source files.
  -build_flags string
        (reflect mode) Additional flags for go build.
  -debug_parser
        Print out parser results only.
  -destination string
        Output file; defaults to stdout.
  -exec_only string
        (reflect mode) If set, execute this reflection program.
  -imports string
        (source mode) Comma-separated name=path pairs of explicit imports to use.
  -package string
        Package of the generated code; defaults to the package of the input with a 'mock_' prefix.
  -prog_only
        (reflect mode) Only generate the reflection program; write it to stdout.
  -self_package string
        If set, the package this mock will be part of.
  -source string
        (source mode) Input Go source file; enables source mode.
  -write_package_comment
        Writes package documentation comment (godoc) if true. (default true)
2017/12/08 12:46:50 Expected exactly two arguments

以上です

21Cafe開催イベントを振り返る(その2)

21Cafe開催イベントを振り返る(その2)

Squarespace良いので感謝を書く

Squarespace良いので感謝を書く