iOS Test Night #6 1周年 まとめ #ios_test_night

testnight.connpass.com

iOS Test Night #6 にブログ枠として参加したので、そのレポートです。 ㊗️ 1周年 🎉

開始前の挨拶として、Qiita に投稿された iOS のテスト関連の記事がこの一年で増えたのか? という話から始まりました。
結果として、増えはしたけどそこまで増えていないということで、今後も勉強会を通して iOS のテストをもっと盛り上げていくぞ 💪 とのことでした。

発表

Appiumで行う対話的テスト by @alligator_tama

TODO: 公開されたら資料はる

Appium で 2 つのアプリを立ち上げて、それらのアプリを対話的に実行させテストを行う、という内容。
Xcode9 から iOS Simulator が複数立ち上げられるようになってできるようになり、Appium の実行時に Port 番号を指定するだけで複数 Simulator を立ち上げることができる。

実際に 2 つのアプリが連携するデモが行われました。

Quick / Nimble をより快適に使うために by @tobi462

  • Quick / Nimble をライブコーディングを交えながら快適に使うはなし
    • Quick の概要や rspec のように構造的なテストにかけることのメリットの話や、 assertion ライブラリの Nimble についての話。
    • Nimble は英文のように読めるし、エラーメッセージもわかりやすく出力されるというメリットがある。
  • しかしメリットだけではなくデメリットもあって
    • 学習コストがかかる、ドキュメントの量も結構ある
    • BDD フレームワークの慣れが必要
    • 補完が微妙
      • Quick の expect ではなく XCTest の expect が出てきてしまったり、メソッドチェーンが切れると補完が効かない
  • これらのデメリットはラッパーを作ったり、スニペットを作って補完を改善できた。

fastlane snapshotの並列実行についてまとめた by @tarappo

fastlane snapshot の速度改善のはなし。

snapshot は指定端末・言語でスクショを簡単に取ることができるもの。snapshot は端末数・言語数が増えるほど実行時間が増加する。
今までの改善策はマシン3台用意するなど、金で殴っていた。

しかし Xcode9 から Simulator の並列実行ができるようになった、snapshot の設定を concurrent_simulators: true にするだけで良い。端末は devices で指定する。

MacPro (6コア) で並列実行した結果、5台同時起動する場合は 2 倍早くなったのでとりあえず並列実行するのが良さそう。

LT枠

assertion を積極的に使って役だった話 by @kboy_silvergym

筋肉 (assertion) の話。

  • assertion はわざとクラッシュさせること。
  • Assert, precondition, fatalError などがある。
  • assertion する目的は、実装漏れを防ぎたい、不安なところに念のため書いておく。
  • 実装もれを防ぐ
    • id == 0 だったらおかしい!
    • enum で絶対に通らないであろうところに assertionFailure()
  • 実際に防げた
    • サーバから uid というパラメータをサーバからもらえなかったことに気がつけた

未来のエンジニアのために assertion を残すというのはとても良さそう。

iOSシミュレータでのUIテストの様子を録画してみよう by @Kesin11

  • UITest は時間がかかるのと、テストが落ちた時にスクショを撮ってくれるけどなんでテストが落ちたのかわからない…。
    • なのでスクショじゃなくて録画したい。
  • QuickTime
    • コマンドからできないし不便
  • recordVideo

Test Nightきっかけでテストをはじめた人の発表枠

Mocking With Firebase by @d_date

TODO: 資料公開されたらはる

Firebase Realtime DB のテストについての話。

  • ターゲットで読み込むファイルを変えることでモック化する。
  • インターフェイスを同じにして処理を変えてテストをする。

プロジェクトの1ファイルにテストを書いてみた! 〜本当にこれで合ってるの…??〜 by @takattata

XCTest で CleanArchitecture のテストをかいてみたり、Firebase をモックしたり、RxSwift でテストを書いてみたけど本当に正しいのかわからんのであとでみんなに教えてほしい、みたいな感じだった。

何故テストが書けないのか by @fromkk

techblog.timers-inc.com

個人アプリなのでテストは書いてない。というかそもそもテストをかける設計になっていない。
なので設計を見直して適切に継承するようにした。

(自分の個人アプリもシングルトン + FatViewController + Realm + ノーテストなので心が痛かった... )