登録者:sao

Silverligthを囲む会in大阪#2_080516Unit testing with Silverlight 2.pdf

2008-06-22 02:05:50
アクセス数:988
タグ: Silverlightを囲む会 UnitTesting Silverlight2.0 Silverlight SilverlightSquare
0

■説明

Silverligthを囲む会in大阪#2(2008/5/16)の講演資料です。
Unit testing with Silverlight 2
丸山和秀

リンク

このスライドの現在表示中のページへのリンク
ブログパーツ
google ガジェット

関連するスライド

Silverligthを囲む会inKOF2008_081108囲む会紹介.pdf

投稿者:sao
投稿日時:2008-11-06 01:44:20

Silverligthを囲む会in大阪#4_080927Expression_Design.pdf

投稿者:sao
投稿日時:2008-10-26 09:17:00

Fleverlight勉強会_080726Flex&Silverlightをはじめるには.pdf

投稿者:sao
投稿日時:2008-08-04 01:50:53

Fleverlight勉強会_080726AirDemo.pdf

投稿者:sao
投稿日時:2008-08-02 16:10:16

Fleverlight勉強会_080726いさみんの初心者講座7月.pdf

投稿者:sao
投稿日時:2008-08-02 15:48:48

Silverligthを囲む会in大阪#3_080726Silverlight2でRIA開発.pdf

投稿者:sao
投稿日時:2008-08-01 02:52:44

お気に入り登録したユーザ


GoodJobしたユーザ


■スライド内のテキスト

スライド1: 丸山 和秀

スライド2: Before starting…EnvironmentCreate Solution and ProjectsHello WorldHello World by TextBlockHello World by AsynchronousSummary

スライド3:



スライド4:



スライド5:



スライド6: Silverlight 2 SDKVisual Studio 2008 Standard Edition 以上Microsoft Silverlight Tools Beta 1 for VS2008

スライド7: Source Code and Unit Tests for Silverlight 2Beta 1 Controlshttp://www.microsoft.com/downloads/details.aspx?FamilyId=EA93DD89-3AF2-4ACB-9CF4-BFE01B3F02D4&displaylang=enUnit Test Visual Studio Templatehttp://media.jeff.wilcox.name/blog/mix08/SilverlightTestProject.ziphttp://media.jeff.wilcox.name/blog/mix08/SilverlightTestClass.zip

スライド8: Controlのソースコード一式を解凍してできたフォルダの以下の場所を参照{解凍してできたフォルダ}¥Controls¥Bin以下のファイルがあることを確認Microsoft.Silverlight.Testing.dllMicrosoft.Silverlight.Testing.Framework.dllMicrosoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll上記のファイルを以下にコピー%programfiles%¥MicrosoftSDKs¥Silverlight¥v2.0¥Libraries¥Client

スライド9: 以下の2つのファイルをダウンロードSilverlightTestProject.zipSilverlightTestClass.zip上記のファイルを以下にコピー(解凍はしない)SilverlightTestProject.zip%userprofile%¥Documents¥Visual Studio2008¥Templates¥ProjectTemplatesSilverlightTestClass.zip%userprofile%¥Documents¥Visual Studio2008¥Templates¥ItemTemplates

スライド10:



スライド11: いつものように作成

スライド12: [Project types] - [Visual C#][Templates] – [Silverlight Test Project][Solution] – [Add to Solution]

スライド13: Webプロジェクトのコンテキストメニューより[Add Silverligt Link…]を選択

スライド14: [Project to link] – [SLTest.Tests][Enable Silverlight debugging] – [Off]Click [Add] button

スライド15: テストプロジェクトの参照にSilverlightプロジェクトを追加

スライド16: SLTest_Webをスタートアッププロジェクトに設定SLTest.TestsTestPage.htmlを右クリックしてコンテキストメニューより[Set as start page]を選択

スライド17:



スライド18: テストプロジェクトのTestクラスのTestMethodの中を以下のように修正[TestMethod]public void TestMethod(){}Assert.IsTrue(true);

スライド19:



スライド20:



スライド21: SilverlightプロジェクトにGreetingクラスを追加し、以下のメソッドを追加public string GetMessage(){}return "Hello world";

スライド22: テストプロジェクトにGreetingTestクラスを追加する[Visual C#] – [Silverlight Test Class]を選択

スライド23: Usingに以下があるか確認Microsoft.VisualStudio.TestTools.UnitTestingUsingに以下を追加SLTestもともとのTestMethodメソッドは削除

スライド24: GreetingTestクラスに以下のメソッドを追加する[TestMethod]public void メッセージでHelloworldが取得できるべき(){}var greeting = new Greeting();Assert.AreEqual("Hello world", greeting.GetMessage());

スライド25:



スライド26: 意外と普通にテスト可能とくに特別なことはなし

スライド27:



スライド28: ボタンが押されたらGreeting.GetMessageを呼び出して結果をTextBlockに張り付ける

スライド29: このテスティングフレームワークは以下のことはしないコントロール階層をゴリゴリ突き進んだりリフレクション使って中を覗き込んだり、差し込んだりキーボードやマウスをエミューレートしたりただ単純にメソッドやプロパティをつついて、その値を使うだけPage.findButton(“#layoutRoot/StackPanel[1]”).SimulateClick()

スライド30: たとえばボタンクリック検証される側のクラスにボタンがクリックされたことを表す、メソッドを用意しておかなければならないinternal void SimulateMessageButtonClick(){}this.MessageButton_Click(messageButton,new RoutedEventArgs());

スライド31: テスト用のメソッドは internal で宣言AssemblyInfoにInternalVisibleToAttributeを追加してテストアセンブリを設定テスト用のメソッドのドキュメントコメントにテスト用のメソッドであることを明示[assembly:InternalVisibleTo(“SlTest.Test”)]/// <summary>/// for test/// </summary>Internal void SimulateButtonClick(){…

スライド32: SilverlightプロジェクトのPage.xamlにTextBlockとButtonを追加<UserControl x:Class="SLTest.Page"xmlns="http://schemas.microsoft.com/client/2007"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Width="400" Height="300"><Grid x:Name="LayoutRoot" Background="White"><StackPanel><TextBlock x:Name="messageTextBlock" /><Button x:Name= "messageButton" Click="Button_Click"Content="メッセージ" /></StackPanel></Grid></UserControl>

スライド33: ボタンクリックのときのメソッドを以下のように設定private void Button_Click(object sender, RoutedEventArgs e){}messageTextBlock.Text = (new Greeting()).GetMessage();

スライド34: Page.xaml.csにテストから呼ばれるボタンクリックをシミュレートするメソッドを追加/// <summary>/// for test/// </summary>internal void SimuluteMessageButtonClick(){}Button_Click(messageButton,new RoutedEventArgs());

スライド35: UIのテストのときはテストクラスはSilverlightTestを継承するTestInitializeでUIのインスタンスを作成し、TestSurfaceの子コントロールとして追加

スライド36: テストプロジェクトにPageをテストする用のPageTestクラスを追加する[TestClass]public class PageTest : SilverlightTest{}private Page page = null;[TestInitialize]public void Pageの初期化(){}page = new Page();this.Silverlight.TestSurface.Children.Add(page);

スライド37: PageTestにボタンがクリックされた時のテストを追加[TestMethod]public void ボタンがクリックされたらメッセージが表示されるべき(){}Assert.IsNull(page.messageTextBlock.Text);page.SimuluteMessageButtonClick();Assert.AreEqual("Hello world",page.messageTextBlock.Text);

スライド38:



スライド39: テストから呼び出さしてシミュレートできるような形で、そもそもコードを書く必要があるコーディング方法の検討パターンの作成ユーザーの操作が介在するものは自動でテストできないFileOpenDialogJavascript の alertetc…

スライド40:



スライド41: Silverlightでは以下の処理が大半を占めそうデータのやり取りのための通信UXのためのアニメーション実は両方とも非同期つまり処理の大半が非同期になるSilverlightプログラマー(というかこれからのプログラマー)は非同期をどう乗り越えるかが課題!?Parallel Extensions…

スライド42: 非同期で実行された結果のテストが可能SilverlightTestを継承メソッドの属性にAsynchronousAttributeを設定SilverlightTestのEnqueueXXXXメソッドを使用Visual Studioのデバッグは実行しないテストが失敗した場合に、さきにVisual Studioが補足してしまうため継続すれば問題ないがめんどくさい

スライド43: EnqueueXXXXメソッドはテストのメソッドが終了後に設定した順番で呼び出される。EnqueueCallback 何らかの処理を行うEnqueueConditional 次のキューに進むかどうかのデリゲートを設定する。戻り値が true になるまで繰り返されるEnqueueSleep スレッドを指定した時間だけスリープするEnqueueTestComplete 終了したことを通知するEnqueueTestWorkItem 独自の処理をおこなうITestWorkItemを追加する

スライド44: PageTest.csに以下のメソッドを追加[TestMethod][Asynchronous]public void 非同期処理のテスト(){}

スライド45: 非同期のテストメソッドに以下を追記var worker = new BackgroundWorker();var result = false;var finishedWork = false;worker.DoWork += (s,e) =>{};e.Result = true;worker.RunWorkerCompleted += (s,e) =>{};result = (bool)e.Result;finishedWork = true;

スライド46: 非同期処理のコードの後ろに以下を追加上から順番に実行されるthis.EnqueueCallback(() => worker.RunWorkerAsync());this.EnqueueConditional(() => finishedWork);this.EnqueueCallback(() => Assert.IsTrue(result));this.EnqueueTestComplete();

スライド47:



スライド48: var worker = new BackgroundWorker();var result = false;var finishedWork = false;worker.DoWork += (s,e) =>{};e.Result = false;worker.RunWorkerCompleted += (s,e) =>{};result = (bool)e.Result;finishedWork = true;

スライド49:



スライド50: EnqueueXXXXは以下の順番に記述EnqueueCallbackで非同期処理の開始EnqueueConditionalで非同期処理の終了を待機EnqueueCallbackで非同期処理の結果を検討EnqueueTestCompleteで終了終了を判定する用のフラグが必要終了した後に結果を取得するためのインターフェイスが必要割り込み処理などの検証は難しい

スライド51: 基本部分は満たしてるSilverlightらしいかと言われればそうでもないAnimationとか描画とかNunitなどでもテストできるのがベターもうちょっと軽いとなおうれしいMSBuildやNantなどから起動したい継続的インテグレーションに対応したいBeta 1だからこれからどうなるかわからないMSからこの手のものが出されることが重要!

スライド52: