Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Technology
0
150
シンプルなモック生成ツール matryer/moq 使ってみた
uji
May 31, 2021
Tweet
Share
More Decks by uji
See All by uji
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
1
45
5分で完全理解するGoのiota
uji
4
3.2k
GoのGC (garbage collector)について理解する
uji
9
4.3k
goroutine で panic すると親プロセスをまきこんで落ちる
uji
0
550
Goにおけるポインタの使いどころ
uji
0
250
Google Chromeで始めるVim
uji
0
130
Other Decks in Technology
See All in Technology
Stripe / Okta Customer Identity Cloud(旧Auth0) の採用に至った理由 〜モリサワの SaaS 戦略〜
tomuro
0
120
Hatena Engineer Seminar #23 「チームとプロダクトを育てる Mackerel 開発合宿」
arthur1
0
280
スクラム導入して変わったチーム、組織のありかた
yumechi
0
180
日経電子版だけじゃない! 日経の新規Webメディアの開発 - NIKKEI Tech Talk #3
sztm
0
250
Oracle Transaction Manager for Microservices Free 22.3 製品概要
oracle4engineer
PRO
5
100
グローバルチームことはじめ / Bootstrapping a global team
tasshi
1
660
API連携に伴う規制と対応 / Regulations and responses to API linkage
moneyforward
0
150
創業1年目のスタートアップでAWSコストを抑えるために取り組んでいること / How to Keep AWS Costs Down at a Startup
yuj1osm
3
2.1k
データベースの発表には RDBMS 以外もありますよ
maroon1st
0
230
ML PM, DS PMってどんな仕事をしているの?
line_developers
PRO
1
230
NGINXENG JP#2 - 4-NGINX-エンジニアリング勉強会
hiropo20
0
100
OCI技術資料 : ロード・バランサー 詳細 / Load Balancer 200
ocise
2
7.2k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
299
110k
The Power of CSS Pseudo Elements
geoffreycrofte
52
4.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
A better future with KSS
kneath
230
16k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
A Modern Web Designer's Workflow
chriscoyier
689
180k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
240
11k
Learning to Love Humans: Emotional Interface Design
aarron
263
38k
Unsuck your backbone
ammeep
659
56k
Thoughts on Productivity
jonyablonski
49
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
22
42k
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