2012年9月19日水曜日

WindowsPhoneの非同期なRxをユニットテスト



コールバックメソッドを利用することよりも、Rxによってメソッドチェーンを記述することで、

コードが分散せず一貫したコードが書けるように思えます。

もちろん、ユニットテストは必要なのですがいかんせんWindowsPhoneはテストフレームワークが公式に

提供されているわけでは無いらしく、色々と面倒くさいです。

どうにか、記述する方法を発見したので公開。と言っても、neueccさんのところで公開されていますが・・・。

1.WindowsPhone7.1のプロジェクトを作る


作りましょう。

2.テスト対象のコードを記述する。


今回は、引数のURLにアクセスを行いページの内容をstringで取得するメソッドを用意しました。


3.テストプロジェクトを作成する。


3.1. 


まずは、WindowsPhone7.1のプロジェクトを作ります。

3.2. 


http://www.jeff.wilcox.name/2011/06/updated-ut-mango-bits/ で配布されているファイルをダウンロードし、参照に追加します。

3.3. 


テスト対象のプロジェクトを参照に追加します。

3.4.


 http://blog.richardszalay.com/2011/08/08/writing-asynchronous-unit-tests-with-rx-and-the-silverlight-unit-testing-framework/
こちらに記述されている WorkItemTestScheduler  と ObservableExtensions を追加します。

4. テストを記述する


今回は次のコードを用いてURLに適切にアクセスができているのかを確認します。


Assert.IsNotNull() とちょっと手を抜いていますが・・・。


5. 実行する

ソリューションを右クリックし、「スタートアッププロジェクトの設定」を選び、

テストプロジェクトをスタートアッププロジェクトに設定します。



Ctrl+F5でデバッグなし実行を行います。テスト結果は次のように出力されます。格好いいですね。

成功したパターン
失敗したパターン

6.所感

このやり方を発見するまでに時間がかかってしまった。結局やりたいことは例によってテストやビルドの自動化。

http://blogs.msdn.com/b/francischeung/archive/2012/01/03/running-windows-phone-unit-tests-via-msbuild.aspx

このサイトを見る限りMSBuildを利用して、コマンドラインからテストの実行ができるらしい? ので、いつもどおり

Jenkinsさんと組み合わせてCI環境を作るところまでやりたいです。

0 件のコメント:

コメントを投稿