![見出し画像](https://assets.st-note.com/production/uploads/images/29033311/rectangle_large_type_2_6ec0ab7ca137effd2cbf42699fdb8126.png?width=1200)
Get your test results fasterをみた #WWDC20
こちらの記事には非公開の情報が含まれているのでApple Developer Programに登録しNDAに合意している方のみ閲覧してください
#WWDC20 3日目です(日本では木曜日ですがPDTではまだ水曜日)。
フィードバックループ
テストを書き、実行、結果を解釈して、十分な自信があれば次のタスクへ。
短いフィードバックループを持つことがテストの結果をより早く得ることができるので重要。
Xcode 12の新機能
テストがハングしている場合
何故テストがハングしてしまっているのかを調べたい。原因としては、デッドロックや、タイムアウトが考えられる。そこでTest PlanにExecution Time Allowanceというオプションが追加された。この機能を有効にするとXcodeは個々のテストにかかる時間に制限をかけることができる。
テストがこの制限を超えるとXcodeはspindumpを捕捉し、ハングしているテストを終了し、テストランナーを再起動して残りのテストを実行する。
テスト結果にspindumpの結果をアタッチするのでどこでハングしているのかを調査する助けになる。Terminalから spindump コマンドをしようして手動で結果を取得することも、アクティビティモニタから取得することも可能。
初期設定では10分の実行時間が設定されている。更に時間が必要な場合はTest Planでカスタマイズ可能。特定のテストやクラスに対して更に時間が必要な場合はexecutionTimeAllowance APIを利用することで対応することが可能。
class XCTestCase: XCTest {
var executionTimeAllowance: TimeInterval // rounded up to nearest minute
}
デモ
時間制限の初期設定を変更する方法
時間制限の優先順位
テスト全体の制限時間
推奨事項
・テストのハングを防ぐにはexecutionTimeAllowanceを利用する
・テストを高速に保つことに関心があるのであれば、XCTestのパフォーマンス APIを利用してパフォーマンスのリグレッションのテストを自動化
・コードのどの部分が遅いかを特定する必要がある場合はInstrumentsを利用
複数のデバイスでのテストの実行
フィードバックループを更に短くするために複数デバイスでのテストの並列実行が可能になった。
Frutaというサンプルアプリではテストの実行時間が30%早くなった。
デバイスへの分散テストを使用する上での推奨事項
・テストの割り当ては決まって無いので同一のデバイスとOSバージョンを使用する
・実行しているデバイスやOSに依存しないテストを配布する
・OSのバージョンが異なっても正しく動作することを証明
まとめ
時間制限とデバイスごとの並列テストという新しい機能を利用してテストのフィードバックループを更に短くしましょう。