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
630
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
Green Tea GCの動作を紙芝居にしてみる
uji
1
71
Go Proverbs の紹介
uji
2
130
Go標準の暗号ライブラリメンテナンス戦略
uji
3
640
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
170
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
230
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
730
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
900
5分で完全理解するGoのiota
uji
11
7.2k
GoのGC (garbage collector)について理解する
uji
11
7.7k
Other Decks in Technology
See All in Technology
RevOps実践で学んだ俺が最強のデータ基盤になることの重要性 / revops-practice-learned
pei0804
1
1k
履歴 on Rails: Bitemporal Data Modelで実現する履歴管理/history-on-rails-with-bitemporal-data-model
hypermkt
0
1.3k
Kafkaを利用したIcebergへのデータストリーミング
shmza
0
210
組織観点からIAM Identity CenterとIAMの設計を考える
nrinetcom
PRO
1
110
Flaky Testへの現実解をGoのプロポーザルから考える | Go Conference 2025
upamune
1
200
GC25 Recap+: Advancing Go Garbage Collection with Green Tea
logica0419
1
130
DEFCON CHV CTF 2025 Write-up
bata_24
0
170
[2025-09-30] Databricks Genie を利用した分析基盤とデータモデリングの IVRy の現在地
wxyzzz
0
200
PythonとLLMで挑む、 4コマ漫画の構造化データ化
esuji5
0
110
WebアプリケーションのUI構築で気を付けてるポイント
tomokusaba
0
100
コンパウンドスタートアップにおけるQAの成長戦略
matsu802
4
560
データエンジニアがこの先生きのこるには...?
10xinc
0
300
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Designing for humans not robots
tammielis
254
25k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Rails Girls Zürich Keynote
gr2m
95
14k
The Invisible Side of Design
smashingmag
301
51k
Visualization
eitanlees
148
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
A better future with KSS
kneath
239
17k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Balancing Empowerment & Direction
lara
4
660
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