Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シンプルなモック生成ツール matryer/moq 使ってみた
Search
uji
May 31, 2021
Technology
0
650
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
testdata ディレクトリを活用しよう!
uji
1
290
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
130
Green Tea GCの動作を紙芝居にしてみる
uji
1
130
Go Proverbs の紹介
uji
2
160
Go標準の暗号ライブラリメンテナンス戦略
uji
3
700
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
200
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
250
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
760
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
960
Other Decks in Technology
See All in Technology
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
200
New Relic 1 年生の振り返りと Cloud Cost Intelligence について #NRUG
play_inc
0
240
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
120
Claude Codeを使った情報整理術
knishioka
11
6.3k
SREが取り組むデプロイ高速化 ─ Docker Buildを最適化した話
capytan
0
150
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
5
2.1k
障害対応訓練、その前に
coconala_engineer
0
200
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
1.6k
オープンソースKeycloakのMCP認可サーバの仕様の対応状況 / 20251219 OpenID BizDay #18 LT Keycloak
oidfj
0
180
20251203_AIxIoTビジネス共創ラボ_第4回勉強会_BP山崎.pdf
iotcomjpadmin
0
140
[Neurogica] 採用ポジション/ Recruitment Position
neurogica
1
130
たまに起きる外部サービスの障害に備えたり備えなかったりする話
egmc
0
410
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
29
Joys of Absence: A Defence of Solitary Play
codingconduct
1
260
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
From π to Pie charts
rasagy
0
91
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
51
46k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
38
How STYLIGHT went responsive
nonsquared
100
6k
A better future with KSS
kneath
240
18k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
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