BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rx と Silverlight で非同期テストを記述する

Rx と Silverlight で非同期テストを記述する

原文(投稿日:2011/08/09)へのリンク

Silverlightの総合テストは困難だ。殆どの外部サービスも、UIスレッドからの値を返す非同期呼び出しを必要とする。また、殆どのテストフレームワークと異なり、スレッドについて同様に言われているSilverlight上で実行されるものは、サービス呼出が返るまで待つ間にスレッドの問題を防ぐことが出来ない。

事態を悪化させているのは、Silverlightのデファクトなテストフレームワークとして知られているものがSilverlight Unit Testing Frameworkだが、同フレームワークは非常に脆弱である。任意のスレッドからの未処理例外はテスト全体の実行を破たんさせ、前述した通りに総合テストはマルチスレッド処理を必要とする。

このことに対する解として、常に EnqueueCallback を利用する方法が考えらえる。これにより、単体テストフレームワークに対して、例外が確実かつ適切に報告される。しかし、この方法は正しく理解することが困難であり、一つの誤りが後続のテスト全体を中断させる。Richard Szalay は Reactive Extensions が非同期テストをどの様に増補し、同時にエラーが少なくすることができるかをデモした。

Richardの用いた技術では、従来のBegin/Endメソッドとともに非同期パターンを利用していると予想される。 Observable.FromAsyncPattern関数はIObservableで呼び出されるサービスをラップするために利用される。同処理後、ObserveOnTest関数は、単体テストフレームワークにWorkItemTestSchedulerと呼ばれる特殊なスケジューラを通して連鎖的に呼び出す機能を付随させる。最後に、Subscribe機能は順番と結果評価の為に呼び出される。

この記事に星をつける

おすすめ度
スタイル

BT