
非同期処理のテストってどう書いてますか?
標準のXCTest自体がサポートしていれば良いのですがそうではないので、非同期処理のテストを書きたい場合には、その仕組みを自作するか出来合いのライブラリを利用する必要があります。現実的な選択肢としては、
- GHUnitやKiwiなど非同期処理をサポートしたテストフレームワークを利用する
- GHunitの非同期処理のテストの仕組みを真似て抜粋したライブラリを利用する(意外とこれが多いかも?)
- expectaなどのマッチャーライブラリに付属の非同期処理の仕組みを使う
となるかと思います。
ただ、私が調べた時点だとどれもしっくりきませんでした。
まず、GHUnitやKiwiなどを採択している場合には良いのですが、非同期処理のテストを書くという目的だけのためにそれらのフレームワークを使うというのは冗長すぎます。
また、GHUnitの非同期処理の仕組みだけを抜き出したライブラリもありますが、TestCaseの親クラスを決まったものにしないといけない(例えばGHAsyncTestCase
を継承したTestCaseで場合のみ利用できるとか)という縛りができるのと、非同期処理を発火する前にprepare
とかを呼ばないといけないのがちょっと鬱陶しい。
そういう意味だとexpectaなどのマッチャー系のライブラリの場合、親クラスも限定されないし、非同期でマッチさせたいところでその機能を使うだけなのでとてもシンプルではあります。ただ、これはこれでマッチャーで非同期処理の完了を待つ性質上、マッチするときはいいけどマッチしないときはタイムアウトまでそこで処理が待たされるという大きな課題があります。
こうしたい!
ぼくとしては理想的にはこういうライブラリを使いたいと思いました。
- テストフレームワークを使っていなくても非同期処理のテストだけが実現できるシンプルなもの
- TestCaseの親クラスが限定されないほうがよい
- 余分なコードを書かずにシンプルに書きたい
- それを利用することでテストの実行が遅くなったりしない
しかし、当初探した限りではこの条件にマッチするものが見つかりませんでした。