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
600
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
Go標準の暗号ライブラリメンテナンス戦略
uji
3
580
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
150
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
220
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
700
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
830
5分で完全理解するGoのiota
uji
11
6.9k
GoのGC (garbage collector)について理解する
uji
11
7.5k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
2k
Goにおけるポインタの使いどころ
uji
0
1k
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
4.2k
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
230
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
120
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
7.3k
Copilot Agentを普段使いしてわかった、バックエンド開発で使えるTips
ykagano
1
1k
What's new in OpenShift 4.19
redhatlivestreaming
1
230
Model Mondays S2E01: Advanced Reasoning
nitya
0
340
「規約、知識、オペレーション」から考える中規模以上の開発組織のCursorルールの 考え方・育て方 / Cursor Rules for Coding Styles, Domain Knowledges and Operations
yuitosato
6
1.6k
技術職じゃない私がVibe Codingで感じた、AGIが身近になる未来
blueb
0
120
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
3
150
新卒3年目の後悔〜機械学習モデルジョブの運用を頑張った話〜
kameitomohiro
0
220
Cloud Native Scalability for Internal Developer Platforms
hhiroshell
2
450
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
350
20k
Rails Girls Zürich Keynote
gr2m
94
14k
Why Our Code Smells
bkeepers
PRO
337
57k
Producing Creativity
orderedlist
PRO
346
40k
Gamification - CAS2011
davidbonilla
81
5.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Fireside Chat
paigeccino
37
3.5k
How GitHub (no longer) Works
holman
314
140k
Docker and Python
trallard
44
3.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
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