BT

Your opinion matters! あなたのご意見でInfoQが変わる!

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

| 作者: Jonathan Allen フォローする 186 人のフォロワー , 翻訳者 勇 大地 フォローする 0 人のフォロワー 投稿日 2011年9月20日. 推定読書時間: 1 分 |

原文(投稿日: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機能は順番と結果評価の為に呼び出される。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT