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
390
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
130
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
500
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
500
5分で完全理解するGoのiota
uji
7
5.1k
GoのGC (garbage collector)について理解する
uji
10
6.1k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.3k
Goにおけるポインタの使いどころ
uji
0
610
Google Chromeで始めるVim
uji
0
150
Other Decks in Technology
See All in Technology
ServiceNow Knowledge 24の歩き方 EYストラテジー・アンド・コンサルティング
manarobot
0
190
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
2
1k
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
210
MapLibreとAmazon Location Service
dayjournal
1
150
私が trocco を推す理由
__allllllllez__
1
220
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
340
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
1
220
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
210
データベース02: データベースの概念
trycycle
0
160
エンジニアのキャリアをちょっと楽しくする3本の軸/Three Pillars to Make an Engineer's Career More Enjoyable
kwappa
0
2.7k
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
150
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
216
8.6k
Git: the NoSQL Database
bkeepers
PRO
422
63k
Fireside Chat
paigeccino
21
2.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Web development in the modern age
philhawksworth
202
10k
Producing Creativity
orderedlist
PRO
337
39k
A Philosophy of Restraint
colly
197
16k
A better future with KSS
kneath
231
16k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
42k
Code Reviewing Like a Champion
maltzj
514
39k
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