注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。
単体テストやUIテストについても、書き方によって適切かどうかが変わってくる場合がある。遅延実行が発生する箇所については特に考慮が必要だ。
テストコードの場合、あるステータスになった、タイムアウトが発生した、などの段顔で成功/失敗を判定するが、非同期処理や遅延処理などを使う場合、その組み方によっては環境によってはうまくいかずに失敗というケースもある。特に、別の処理が完了していることが前提となっているものの遅延実行などでそれが起こりがちである。
例えば、処理Aが完了していることが前提となっている処理Bについて、処理Aを非同期処理で行い、一定時間経過後に処理Bを遅延実行するというコードになっていた場合、問題になる。運良く処理Aが完了していればテストは成功するが、処理Aが完了していない状態で処理Bを実行しようとした時に、何も実行されないか、異常な処理になるか、クラッシュが発生するかなどの状況になって、テストは失敗する。
この場合は、テストの組み方がまずいと言える。
対処法としては、何らかの方法で処理Aが終わった段階で処理Bを実行するようにすることである。これは実際のプログラムでも当然のように使われることではあるが。もしそれがライブラリーに含まれていないとしたら、組み込む必要があるだろう。
テストコードも、その前提や組み方に問題があると大きな問題になりかねないので、しっかりとしたものを組もう。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。