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
650
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
testdata ディレクトリを活用しよう!
uji
1
340
MCP 公式の Go SDK で QA データ登録アシスタントを作ってみた
uji
0
140
Green Tea GCの動作を紙芝居にしてみる
uji
1
140
Go Proverbs の紹介
uji
2
170
Go標準の暗号ライブラリメンテナンス戦略
uji
3
710
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
220
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
270
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
770
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
980
Other Decks in Technology
See All in Technology
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
320
20260204_Midosuji_Tech
takuyay0ne
1
160
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
460
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
710
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
160
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
13k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
230
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
140
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
200
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Leo the Paperboy
mayatellez
4
1.4k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Typedesign – Prime Four
hannesfritz
42
2.9k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
83
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.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