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
570
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
Go標準の暗号ライブラリメンテナンス戦略
uji
3
540
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
130
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
200
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
670
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
780
5分で完全理解するGoのiota
uji
11
6.7k
GoのGC (garbage collector)について理解する
uji
10
7.3k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
1.9k
Goにおけるポインタの使いどころ
uji
0
950
Other Decks in Technology
See All in Technology
さくらの夕べ Debianナイト - さくらのVPS編
dictoss
0
180
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
1
350
自分の軸足を見つけろ
tsuemura
2
580
ゆるくVPC Latticeについてまとめてみたら、意外と奥深い件
masakiokuda
2
230
2025年春に見直したい、リソース最適化の基本
sogaoh
PRO
0
460
AIで進化するソフトウェアテスト:mablの最新生成AI機能でQAを加速!
mfunaki
0
110
AIエージェントの地上戦 〜開発計画と運用実践 / 2025/04/08 Findy W&Bミートアップ #19
smiyawaki0820
25
8.4k
LangfuseでAIエージェントの 可観測性を高めよう!/Enhancing AI Agent Observability with Langfuse!
jnymyk
0
170
やさしいMCP入門
minorun365
PRO
146
95k
はじめてのSDET / My first challenge as a SDET
bun913
1
190
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
230
大AI時代で輝くために今こそドメインにディープダイブしよう / Deep Dive into Domain in AI-Agent-Era
yuitosato
1
260
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
104
19k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
Building Adaptive Systems
keathley
41
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.6k
How GitHub (no longer) Works
holman
314
140k
Unsuck your backbone
ammeep
670
57k
Designing for humans not robots
tammielis
252
25k
Become a Pro
speakerdeck
PRO
27
5.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
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