##概要
UITestにおいて「テストの処理を待つ」方法としてはexpectionForPredicate,dispatch_afterあたりがよく取り上げられます。
expectionForPredicateは「画面が一定の条件を満たすまで」待ち、dispatch afterは「一定時間」待ちます。
今回説明するsleepも「一定時間」待つ方法ですが、dispatch afterとはちがった性質を持っているため、使いどころによって他の二つの方法では解決できない問題にも対処できます。
##dispatch afterとsleepの違い
XCTestでUITestするとき便利なもの、困ったこととその解決策
この記事の「NSTimerなどのテストで遅延したい時」の項目ではdispatch afterを用いています。
これを用いると、{}で囲んだ部分を指定した時間だけ後に実行できますが、その外の部分はどんどん先に進みます。
なので、運用としてはこの記事のようにどこかでexpectionForPredicateを使って一定時間待った後に行われる処理の完了を待ったりみたいな使い方をします。
一方、sleepはテストがその行まで来たときにその行で一定時間止まります。
dispatch_afterのように他の処理が必要ありません。(アプリの処理が止まって困らない限り)
すなわち、待機動作が1行で書けます。
##使いどころ
- expectionForPredicateで拾えるような画面の変化ではなく時間経過を待ちたい時(APIを一定時間空けて叩くときとか)
- その間アプリ自体は止まってもいい時(止まってほしくないならdispatch after)
- テストコードを短くしたい時
##使い方
// 前の処理
sleep(4) //引数で指定した秒数だけ待機します。ここでは4秒待ちます。
//以下、一定時間待ってから行いたい処理
##参考
(http://galakutaapp.blogspot.com/2015/03/blog-post_26.html)