2019/04/16(火)に行われた「iOS Test Night #10」のまとめです。
ハッシュタグは#ios_test_nightです🐦
「iOS Test Night」とは?
DeNAのテストに関するエンジニア集団「SWET」が主催しているイベントです。
iOSのテストに関する知識の共有を目的としています。
イベントページはこちら↓
開場
- 時間:19:15 -
会場はヒカリエ24Fのサクラカフェです。
ほんのり薄暗く、いい雰囲気です。

窓からの眺めも抜群です。

LT
Azure Pipelines for iOS
主にOSS用途でAzure Pipelinesを使ってみたという発表でした。
実際にAzure Pipelinesを使ってiOSアプリをビルドするデモをしていただいたので、非常にわかりやすかったです。
私もpotatotips #60でAzure Pipelinesについての発表をしたのですが、5分のLTだったのでデモをする余裕まではなかったです。
デモの途中、 `xcodebuild test` で「return code: 65」エラーが発生していましたが、おそらく↓で解決します。
私は業務でもプライベートでもがっつりAzure Pipelinesを使っているので、ぎぎにゃんさんの発表でAzure Pipelinesユーザーが増えてくれると嬉しいです!
Snapshot Testing
- 時間:19:50–20:05
- 発表者:susieyyさん(@susieyy)
Snapshot Testingについての発表でした。
Snapshot Testingは行ったことがなかったので非常に勉強になりました。
画面カタログや新メンバーのキャッチアップにも使えるのは大きなメリットだと思いました。
FBが作成してUberが引き継いだ「iOS SnapshotTestCase」というフレームワークがあります。
去年の12月に「Snapshot Testing」というフレームワークが公開され、強力なようです。
私はどちらも使ったことがないので、試してみたいと思いました。
最後にまとめとして「まずはDomain Testingをしっかり書くこと」と仰っており、テストピラミッドに沿ってテストを書くことは守った方がよさそうです。
iOSアプリのテストを書きたいのに書けないあなたへ
- 時間:20:05–20:10
- 発表者:Tomohiro Imaizumiさん(@imaizume)
単体テストを書いたことがない人向けの発表でした。
以下の3Tipsを守ることでテストが書きやすくなるということです。
- 「重要なコード」より「テストしやすいコード」からテストを書いていく
- 大域変数は抽象化して差し替えられるようにする
- ViewControllerはテストせず、ロジックを別ファイルに切り出す
スマホでスライドをめくるのがカッコよかったです。
これで今まで単体テストを書いていない人が書き始めたら嬉しいです!
ちなみに私はメガネも好きなのでレーシックはしません!笑
RxSwiftのテスト入門
- 時間:20:10–20:15
- 発表者:Akihisa Sengokuさん(@akihisasen)
RxSwiftのテストについての発表でした。
Amebaは大きなアプリなので、RxSwiftに書き換え始めたのは去年からとのことです。
「RxTest」というRxSwift用のフレームワークを使うのがいいようです。
RxSwift自体もRxTestでテストされているとのことです。
私はRxSwiftがほぼわからないのであまり着いていけませんでした。
RxSwiftを勉強したいとは思っているので、そのときに読み返したいスライドでした。
Viewのテストどうしてますか?
- 時間:20:15–20:20
- 発表者:kariaduuさん(@kariad_uu)
Viewのテストについての発表でした。
Viewのテストを4パターン紹介していました。
- UIテスト
- Snapshotテスト
- PresenterのUnitテスト
- ViewのUnitテスト
kariadさんは発表後に以下のツイートをしていました。
私はViewのUnitテストとSnapshotテストを一切行わず、PresenterのUnitテストとXCUITestを行っているので、正反対でした。
アプリの種類や規模感にもよりますが、こういった違いは面白いと思いました。
`UIControl` を使えばタップできるViewを簡単に生成できるようです。
「Succinct」というライブラリを使うことで、ViewのUnitテストを簡単に書けるようです。
このライブラリの開発者の方は会場にいたようです。
Viewのテストは悩んでいる人が多いと思うので、参考になる発表でした。
まとめとして「こういった場合にはこのテストが有効」などと教えていただけるとさらに嬉しかったです。(懇親会で聞けばよかったです)
追記:kariadさんにご返信いただきました。
こちらこそ記事に対してご返信いただきありがとうございます!「何」を「どこまで」テストするかによるので、やはりケースバイケースということでした。
自炊が得意とのことなので、それも懇親会で聞けばよかったです笑
Swift で ParameterizedTest をやってみた話
Parameterized Testについての発表でした。
Parameterized Testは行ったことがなかったので非常に勉強になりました。
Go言語では「テーブル駆動テスト」といって一般的な手法のようです。
XCTestではエラーを出力する行を指定できるのですが(初めて知りました)、それを簡単に使えるライブラリを開発されていました。
ライブラリはまだ発展途上のようです。
私はスターを付けました。
みなさんもスターを付けてtobi462さんのモチベーションを上げ、ライブラリをどんどん発展していただきましょう笑
テストコードの見通しがよくなるので、Parameterized Testは積極的に使っていきたいと思いました。
懇親会
- 時間:20:25–21:30
LTの終盤から匂いが漂っていたので気になっていましたが、やはりご飯はカレーでした🍛
甘口と中辛の2種類が用意されているという素晴らしさ。
カレーの写真は取り忘れたのでサンドイッチの写真を貼ります。

懇親会ではいろんな方とお話できてとても楽しかったです!
特に「Swiftでテストコードを自動生成できるといいよね」という話が面白かったです。
誰か作ってくれないかな…笑
懇親会はこんな感じでした↓

おわりに
iOS Test Nightは初参加でしたが非常に勉強になり、楽しかったです!
発表者や運営の方を含め感謝です。
完全にテストのモチベーションが上がりました。
特にスナップショットテストとパラメタライズドテストは行ったことがないので、早く試したくてウズウズしています。
最後に宣伝
特に宣伝するようなことはありません、、
あえていうなら@the_uhooiというアカウントでTwitterをやっているので、お気軽にフォローやリプライなどください!
参考リンク
勉強会のまとめ記事を書くのは初めてだったので、以下の記事の構成を参考にさせていただきました。