スナップショットテスト実戦投入 / Practical Snapshot Testing

スナップショットテスト実戦投入 / Practical Snapshot Testing

2019年9月7日に行われたiOSDC Japan 2019 Day2での発表資料になります。

## 補足

本資料内での「スナップショットテスト」という単語は、より一般的には「画像ベーステスト」や、「ビジュアルリグレッションテスト」と呼ばれています。

## 参考リンク・書籍

株式会社Diverse
https://diverse-inc.co.jp/recruit/environment
働きやすい環境で真剣に出会いのプラットフォーム作ってます!

Poiboy
https://poiboy.jp
@imaizume も開発しているマッチングアプリ ぜひDLしてね!!

株式会社Uzumaki
https://uzumaki-inc.jp
Webクリエイターのギルド集団 アプリやデザインのお仕事お待ちしています!!

iOSSnapshotTestCase
https://github.com/uber/ios-snapshot-test-case/
Facebook製で現在はUberがメンテしているスナップショットテストフレームワーク

SnapshotTesting
https://github.com/pointfreeco/swift-snapshot-testing/
Point-Freeの出しているSwift製スナップショットテストフレームワーク

https://fortee.jp/iosdc-japan-2019/proposal/6c77df58-00f6-4623-8fe4-6bfac879fb00

What is iOSSnapshotTestCase (@tamaki)
https://speakerdeck.com/tamaki/what-is-iossnapshottestcase
基礎的な事項が分かりやすくまとめられているのでぜひ併せて読んでみてください!

Snapshot Testing in iOS (@suieyy)
https://speakerdeck.com/susieyy/snapshot-testing-in-ios
概要から運用ノウハウについて分かりやすく書かれています、こちらも必読です!

iOS Snapshot Testing (Aaina Jain)
https://www.linkedin.com/pulse/ios-snapshot-testing-aaina-jain-
スナップショットでの基礎的な説明内容はこちらを参考にさせていただきました

Instantiate
https://github.com/tarunon/Instantiate
ViewControllerやViewに簡単にDIできるようにするためのライブラリ

iOSアプリのテストを書きたいのに書けないあなたへ (@imaizume)
https://speakerdeck.com/imaizume/how-you-should-start-to-write-your-first-unit-test-for-ios
テストのための設計変更やリポジトリパターンについて解説した過去の発表

folio-sec/Fastfile
https://github.com/folio-sec/Fastfile
スナップショットに役立つ大変便利なlaneとスクリプトが揃ったライブラリです folioさんに感謝して使いましょう!!

@imaizume のMarkdownファイル生成スクリプト
https://gist.github.com/imaizume/6aa2537c1c6778b50873c813eb7a15f1
folioさんのスクリプトを参考に一部を改変させていただきました

はじめてのfastlane Snapshot編 - Qiita (@tamaki)
https://qiita.com/tamaki/items/f5e9f9985a91fb6a0f06
fastlane Snapshotについて詳しく知りたい方はこちらを参考に

CharlesでiOS Simulatorの通信をキャプチャする方法 - Qiita
https://qiita.com/ruwatana/items/93cafe2369faec4b2598
今回解説できなかったChalesのインストールやキャプチャー方法はこちらをご参考に

Wiremockで行うUIテスト - Speaker Deck (@tamaki)
https://speakerdeck.com/tamaki/wiremockdexing-uuitesuto
Wiremockを使ったテストの仕方についてまとまっています

[iOS、Swift] ユニットテストの時に、任意のタイミングでViewDidLoad()、ViewWill(Did)Appear()、ViewWill(Did)Disappear()を呼び出す方法 - Qiita
https://qiita.com/mii-chan/items/a9d8fd420d04b92a1c34
ライフサイクルメソッドを外部から操作する時に参考にさせていただきました

Failure image generated despite no change of code and their diff incorrectly rendered · Issue #99 - uber/ios-snapshot-test-case
https://github.com/uber/ios-snapshot-test-case/issues/99
意図しないdiffが出てしまう問題を報告しています 返信がきたらどこかで共有します

Snapshot testing in XCTest - XCNotes - Medium
https://medium.com/xcnotes/snapshot-testing-in-xcuitest-d18ca9bdeae
iOSSnapshotTestCaseのpixel toleranceについて解説されています

switching to dark mode in UI test - Apple Developer Forums
https://medium.com/xcnotes/snapshot-testing-in-xcuitest-d18ca9bdeae
UIテストでDark Modeをエミュレーションすることはできるのか...

1a74617b91d2757b839b9cf3614648ce?s=128

Tomohiro Imaizumi

September 07, 2019
Tweet