ブラックボックスなコードに対して少しずつテストを書いていくためのテクニック @k_katsumi #orecon_ios

https://fortee.jp/iosdc-japan-2018/proposal/51b4f787-3341-462e-8b50-c875915613d9 継続的に開発していく上で、テストは非常に重要です。意図しない影響を防ぎ、毎回のレビューの負荷を大きく下げます。一方で、テストがない複雑なコードはすぐにブラックボックス化し、変更もレビューも大変になります。しかし最初からテストを書くことは難しいことも多く、テスタブルなコードでないこともあります。そのような場合でも、大幅な書き換えをすることなく、最小限の負荷でテストを書いていくさまざまなテクニックを、私の経験から実例を用いて解説します。
5
前へ 1 ・・ 6 7 次へ
nanashiki / Maruyama @7_6_

Mockingjay良さそう。今まで自前で書いてた。 github.com/kylef/Mockingj… #orecon_ios

2018-09-12 21:08:57
にわタコ @niwatako

ホストアプリを使ったUnitTest アプリケーションが起動したテストはUnitTestでできる。UIWindowとかが使えるようになるし、Stubとかに変えるけど、実際のアプリの動きも頑張ればなんとかできるようになります。 #orecon_ios

2018-09-12 21:09:50
ばんじゅん🍓 @banjun

MockingjayでネットワークをスタブしてしまえばViewControllerを表示してテストできる #orecon_ios

2018-09-12 21:09:54
にわタコ @niwatako

アプリケーションという巨大なものにテストを書いていくのは難しいので、それを簡単にするツールを使っていくことになります。 #orecon_ios

2018-09-12 21:09:57
にわタコ @niwatako

iOSSnapshotTestCase ViewやViewControllerを渡すとスクショを自動的に取ってくれて、スクショを2回目以降は比較して前と同じかを比較してくれる。 #orecon_ios

2018-09-12 21:10:03
にわタコ @niwatako

MockingjayはAPIのモックツールで、このPATHにこのファイルを返すみたいなことができる。我々はこれでViewControllerに対していろいろな状態をシミュレートできるようにしている。 #orecon_ios

2018-09-12 21:10:16
にわタコ @niwatako

viewcontrollerが取得する情報を根こそぎスタブにした上で、Viewcontrollerを起動得ると、非同期アクションを使って、状態を表す状態になるので、スナップショットで比較して、意図した状態になっているかを調べます。 #orecon_ios

2018-09-12 21:10:22
にわタコ @niwatako

ヘルパー関数でshowViewControllerでViewController渡すとWindowつくって表示される。 表示の更新を待つためにrunLoopを待つみたいあ関数があります。 #orecon_ios

2018-09-12 21:10:30
にわタコ @niwatako

この2つを使って、スタブで事前状態を用意する、テスト対象のビューコントローラーを作ってヘルパーカンスに渡す、Runループで待って、スナップショットを撮って検証。 #orecon_ios

2018-09-12 21:10:33
トビ @tobi462

Mockingjay については以前発表させていただきました(ご参考まで #orecon_ios speakerdeck.com/yusukehosonuma…

2018-09-12 21:10:40
サ/ (○=×=△=□) @kz56cd

テスト用に空のAppDelegateを用意する #orecon_ios

2018-09-12 21:10:48
かっくん @fromkk

テストの為にAppDelegateをすり替える!なるほど! #orecon_ios

2018-09-12 21:10:55
🐊𝕏 @alligator_tama

AppDelegateのすげ替えってスキーム分けてやるのかな #orecon_ios

2018-09-12 21:11:00
Daiki Matsudate @d_date

入社してコード眺めてる時におもろいなーと思って見てたやつ。 #orecon_ios pic.twitter.com/MqrjIztLoy

2018-09-12 21:11:03
拡大
椎名夏希 @417_72ki

main.swiftを用意して @UIApplicationMain を外す #orecon_ios

2018-09-12 21:11:06
uounɹɐʇ @tarunon

#orecon_ios 絶対今私の関心のある話がある

2018-09-12 21:11:39
にわタコ @niwatako

UIテストの導入効果は非常に大きい。 画面のキャプチャが取れる。差分の検査を行うこともできるし、ファイルでカタログにして網羅的にチェックもできる。 #orecon_ios

2018-09-12 21:12:34
にわタコ @niwatako

「課題感があるところを対応いただいたと思っている。レビュー工数が減った。デグレがないかいろんな状態を作り込んで、回収する以外の場所もいろんな状態を再現してエビデンスをPRに貼ってというすごいコストが掛かっていたところを、自動的に確認ができる用になって生産性が向上した」 #orecon_ios

2018-09-12 21:12:40
noppe @noppefoxwolf

SnapshotTestCaseはキャプチャが残るっていう方が大きいんだよなぁ。 #orecon_ios

2018-09-12 21:12:54
shiz(しず)@翻訳本発売中 @stzn3

iOSScreenshotTestCase screenshotを手で貼る負担が減る #orecon_ios

2018-09-12 21:12:59
にわタコ @niwatako

新しくプロジェクトに入ってくる人はテストを見るとこういう動きをするのかというのが一覧できるので、そういうメリットも有る #orecon_ios

2018-09-12 21:13:09
しゅんくん🐹 @shunkun_san

テストを見ると状態と画面の対応がわかったりすると #orecon_ios

2018-09-12 21:13:18
Daiki Matsudate @d_date

新VI刷新時、このスクショテストに完全に依存していたのが僕です。 #orecon_ios

2018-09-12 21:13:21
nanashiki / Maruyama @7_6_

SnapshotTest、ちゃんと通信Mockを導入してやるとすごく良さそう #orecon_ios

2018-09-12 21:13:26
jollyjoester @jollyjoester

- 取りうる状態の可視化 - 意図しない影響がわかる - ドキュメンテーション的なメリットも #orecon_ios

2018-09-12 21:13:41
前へ 1 ・・ 6 7 次へ