2012年10月4日木曜日

MsBuildでWindows Phone のビルドとテストを自動化


MsBuildって便利ですね しみじみ

自動化は男のロマン。

と言うことで、WindowsPhoneプロジェクトの

-ビルド
-テスト
-結果の回収

を自動で行おうと思います。ゆくゆくは、Jenkinsを利用したCIへと繋がります。

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

の内容ホボそのまま。

一連の自動化の流としては
1.ビルド実行
2.エミュレーターへのインストール
3.テスト実行
4.テスト結果を エミュレーターの分散ストレージに保存
5.テスト結果をローカルにコピー

1.プロジェクトを作る

作りましょう

2.テストプロジェクトを作る

以前の投稿 http://numa08.blogspot.jp/2012/09/windowsphonerx_19.html や、@okazuki さんの

http://d.hatena.ne.jp/okazuki/20110911/1315724390

あたりを参考にテストプロジェクトを作りましょう。

3.ログをファイルに出力する

ファイルと言っても、エミュレーター上の分散ストレージです。

テストプロジェクトに次のコードを追加します。

その上で、テストプロジェクトのMainPage.xaml.csを次のように変更します。

4.MsBuildタスクのプロジェクトを作る

ソリューションに新しい VisualC# クラスライブラリ を作成します。

参照に、
Microsoft.Build
Microsoft.Build.Engine
Microsoft.Build.Framework
Microsoft.Build.Task.v4.0
Microsoft.Build.Utilities.v4.0

を追加。次に、
"C:\Program Files (x86)\Common Files\microsoft shared\Phone Tools\CoreCon\10.0\Bin\Microsoft.Smartdevice.Connectivity.dll"

を参照に追加します。

5.タスクを書く。

MsBuildって本当に強力だなぁとしみじみ。

ぶっちゃけ、次のコードのコピペで動きますけど、もっともっとカスタマイズすると楽しいと思います。



6.MsBuildファイルを書く

こちらは、テストプロジェクトのUUIDやファイルパスなどを指定する必要があります。

さっき作ったprojファイルから見た相対パスらしいので、それに合わせてxapファイルのパスを適切に設定します。

ProductGuidはテストプロジェクトの WMAppManifest.xml のAppタグOriductIDの値を使います。


7.実行する

エミュレーターを立ち上げた状態で MsBuild msbuild.proj としてやれば、自動的にプロジェクトのビルドと、
テストの実行が走ります。

最後に、EmulatorTestResult-$(GUID)-.txtが吐き出されていれば成功。



何が凄いって、テストに失敗するとテストに失敗すると、例外を検知してMsBuildが失敗を返すところ。

これは便利です。Jenkinsの場合、ビルドの成功失敗は取れてましたけど、テストの成功失敗は別で管理してました。

あー、でもこのテストの失敗は無視ー とかそういう状態も発生するわけか。まあ、その辺はタスクのカスタムでなんとかなるんだと思います。


思いますよ。そのうちやります。

0 件のコメント:

コメントを投稿