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
580
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
Go標準の暗号ライブラリメンテナンス戦略
uji
3
550
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
140
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
200
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
680
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
800
5分で完全理解するGoのiota
uji
11
6.8k
GoのGC (garbage collector)について理解する
uji
11
7.3k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.9k
Goにおけるポインタの使いどころ
uji
0
970
Other Decks in Technology
See All in Technology
ドキュメント管理の理想と現実
kazuhe
3
310
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
350
コードや知識を組み込む / Incorporating Codes and Knowledge
ks91
PRO
0
160
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
150
Dynamic Reteaming And Self Organization
miholovesq
3
740
MCPを理解する
yudai00
12
9.1k
ビジネスとデザインとエンジニアリングを繋ぐために 一人のエンジニアは何ができるか / What can a single engineer do to connect business, design, and engineering?
kaminashi
2
860
より良い開発者体験を実現するために~開発初心者が感じた生成AIの可能性~
masakiokuda
0
230
勝手に!深堀り!Cloud Run worker pools / Deep dive Cloud Run worker pools
iselegant
4
620
【Oracle Cloud ウェビナー】ご希望のクラウドでOracle Databaseを実行〜マルチクラウド・ソリューション徹底解説〜
oracle4engineer
PRO
1
140
C++26アップデート 2025-03
faithandbrave
0
1.2k
Новые мапы в Go. Вова Марунин, Clatch, МТС
lamodatech
0
1.7k
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
The Language of Interfaces
destraynor
157
25k
Agile that works and the tools we love
rasmusluckow
329
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Thoughts on Productivity
jonyablonski
69
4.6k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Into the Great Unknown - MozCon
thekraken
38
1.7k
What's in a price? How to price your products and services
michaelherold
245
12k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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