Slide 1

Slide 1 text

YUMEMI.swift #9 モックフレームワーク⽐較 適切なツールを使いテストを楽にしよう

Slide 2

Slide 2 text

Jierong Li (李) • 株式会社ゆめみ • iOSエンジニア • 趣味でAndroidとFlutter開発 • 永遠にリリースできず個⼈開発 • https://jierong.dev ⾃⼰紹介

Slide 3

Slide 3 text

• ⼊⼿しにくい(できない) • テストで使いたい結果を返さな い • 実⾏に時間がかかるなどの、望 ましくない副作⽤がある • 出⼒を検証しにくい(できな い) なぜモック

Slide 4

Slide 4 text

⽐較するフレームワーク ステータス ⭐ 初回リリース⽇ バージョン Mockolo 288 2019年9⽉ 1.2.4 Cuckoo 1.3k 2016年1⽉ 1.4.1 Mockingbird 211 2019年8⽉ 0.14.1

Slide 5

Slide 5 text

⽐較するフレームワーク 分類 • ⾃作⾵ • Mockolo • Mockito⾵ • Cuckoo • Mockingbird

Slide 6

Slide 6 text

Mockolo ⾃作⾵ • 単純なコード⽣成 • 導⼊簡単 • 取り除きも簡単 • 機能不⾜

Slide 7

Slide 7 text

Cuckoo・Mockingbird Mockito⾵

Slide 8

Slide 8 text

ソース指定 • Mockolo:ディレクトリー/ファイル+サフィックス排除+ノーテーション • Cuckoo:ファイル/グロブ(gub)パターン • Mockingbird:ターゲット+個別排排除 • 共通: f i nal class

Slide 9

Slide 9 text

ソース指定 Mockolo • --sourcedirs • --source f i les • --exclude-su f f i xes • --annotation

Slide 10

Slide 10 text

ソース指定 Cuckoo • ファイルベース • --glob • *、?、などのワイルドカードでファイル名のセットを指定

Slide 11

Slide 11 text

ソース指定 Mockingbird • --targets • .mockingbird-ignore • 対策 • ⽣成スピード:キャッシュ • ビルドスピード:Thunk Stubs

Slide 12

Slide 12 text

• 暗黙的にデフォルト実装が使わ れ、無効なテストが作る恐れが ある • ないとテストで実⾏されるとこ ろ全部スタブする必要がある デフォルト実装

Slide 13

Slide 13 text

スタブシーケンス

Slide 14

Slide 14 text

引数チェック 実装

Slide 15

Slide 15 text

引数チェック テスト

Slide 16

Slide 16 text

実⾏順番

Slide 17

Slide 17 text

予想外のコール 余計なことしないのも⼤事

Slide 18

Slide 18 text

まとめ Mockolo Cuckoo Mockingbird 依存性 低い ⾼い ⾼い ソース指定 ホワイトリスト ホワイトリスト ブラックリスト デフォルト実装 デフォルトオン デフォルトオフ デフォルトオフ スタブシーケンス × ○ ○ 引数チェック △ ○ ○ 実⾏順番 × × ○ 予想外のコール × ○ △ Objective-C サポート × ○ × 既存問題 ? 2+件 ?

Slide 19

Slide 19 text

既存問題 Cuckoo

Slide 20

Slide 20 text

Thanks!

Slide 21

Slide 21 text

参考 • Mockolo • Cuckoo • Mockingbird • テストダブル - Wikipedia • グロブ - Wikipedia