Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シンプルなモック生成ツール matryer/moq 使ってみた
Search
uji
May 31, 2021
Technology
0
450
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
160
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
550
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
570
5分で完全理解するGoのiota
uji
10
5.5k
GoのGC (garbage collector)について理解する
uji
10
6.4k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.4k
Goにおけるポインタの使いどころ
uji
0
700
Google Chromeで始めるVim
uji
0
170
Other Decks in Technology
See All in Technology
サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
nologyance
0
180
ギークの理想が7つ集まるエムスリーで夢を叶えよう - エムスリー株式会社
m3_engineering
1
260
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
280
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.8k
フルリモートワークはエンジニアの夢を叶えたか? #cm_odyssey
mamohacy
2
600
データベース研修 DB基礎【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
220
地理情報とAPIのトレンド
nagix
0
160
[NIKKEI Tech Talk]Bias for Action!! 実践から学ぶための仕組とコミュニティ / Community for Practice and Learning
kanamasa
0
280
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
320
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
AutomatedLabを使って内部ペンテストを勉強しよう! -やられ社内ネットワークの自動構築-
n_etupirka
1
610
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
59
9.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
Adopting Sorbet at Scale
ufuk
71
8.8k
How to train your dragon (web standard)
notwaldorf
79
5.5k
Designing for humans not robots
tammielis
247
25k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Clear Off the Table
cherdarchuk
89
320k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
Designing Experiences People Love
moore
136
23k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Building Applications with DynamoDB
mza
89
5.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
262
13k
Transcript
シンプルなモック生成ツール matryer/moq 使ってみた uji @uji_rb
matryer/moq とは • 任意の interface からモック構造体を生成するツール • golang/gomock と扱う課題は同じ
• golang/gomock よりシンプルな仕様
使ってみる • moq -out {生成ファイル名} {ソースディレクトリ} {interface 名} でモックを生成できる
• go generate で生成してみる
使ってみる 生成された
使ってみる • モックを使って テストを書いてみる • 生成された struct に 関数を渡すシンプルな仕様
• HelloFunc が Hello() 呼び出し時に実行される
使ってみる • 関数を定義していない状態で 関数を呼び出すと panic した
golang/gomock と比べて 何が良いのか
生成されたモックが引数、戻り値の型情報を持ってる gomock は interface{} で定義されてしまう 対象 interface の型を確認する必要があり面倒
前処理が無い gomock は モックに gomock.Controller を渡す必要がある テスト毎にこの処理を書く必要があるため面倒
gomock が優れている点 • 引数ごとに処理を定義できる
引数を検証する処理(reflect.DeepEqual等) を書く必要がない
gomock が優れている点 • 関数が呼び出されるべき回数の指定が簡単にできる 最少のみ設定、など結構色々できる (あんまり使ったことない)
moq でもモック関数で処理を実装すればできる
まとめ • moq は引数、戻り値の型情報を持った モックが作られる • gomock は
コントローラーを作成する前処理が必須 対して moq は前処理を書く必要が無い • gomock は引数の検証や、関数呼び出し回数の指定を したい場合楽できる
参考 • 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