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
500
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
110
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
180
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
590
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
670
5分で完全理解するGoのiota
uji
10
6k
GoのGC (garbage collector)について理解する
uji
10
6.8k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.6k
Goにおけるポインタの使いどころ
uji
0
810
Google Chromeで始めるVim
uji
0
190
Other Decks in Technology
See All in Technology
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
130
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
520
複雑なState管理からの脱却
sansantech
PRO
1
140
Terraform Stacks入門 #HashiTalks
msato
0
350
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
AGIについてChatGPTに聞いてみた
blueb
0
130
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
470
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
5
610
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
790
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
Featured
See All Featured
Unsuck your backbone
ammeep
668
57k
Practical Orchestrator
shlominoach
186
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Ruby is Unlike a Banana
tanoku
97
11k
Teambox: Starting and Learning
jrom
133
8.8k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Into the Great Unknown - MozCon
thekraken
32
1.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Music & Morning Musume
bryan
46
6.2k
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