はじめに
前回はSilverlightで単体テストを行うための環境の構築と,
今回,
テストクラスの準備
初めにSilverlightプロジェクトのPageクラスをテストするためのテストクラスを作成しましょう。このテストクラスは後ほど紹介するUIのテストと非同期のテストの両方で使用します。
[新しい項目の追加]でテンプレートに[Silverlight Test Class]を選択し,
追加されたPageTest.
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Silverlight.Testing;
namespace SLUnitTest.Tests
{
[TestClass]
public class PageTest : SilverlightTest //①
{
private Page page = null;
[TestInitialize] //②
public void Pageの初期化()
{
page = new Page();
//③
this.Silverlight.TestSurface.Children.Add(page);
}
}
}
まず①ではSilverlightTestクラスを親クラスに設定しています。このSilverlightTestクラスは以下のような機能を持ちます。
- RootVisualとHTML DOMとのブリッジ機能
- Sleepなどのヘルパーメソッド
- 非同期テストのためのヘルパーメソッド
続いて②ではTestInitialize属性が付加された
「Pageの初期化メソッド」
では,
テストの対象となる機能を追加
Pageクラスに以下のような機能を追加し,
- ボタンが押されたら,
TextBlockに 「Hello world」 と表示される。
まずはPageクラスに上記の機能を追加します。Page.
<StackPanel>
<TextBlock x:Name="messageTextBlock" />
<Button x:Name= "messageButton"
Click="Button_Click" Content="メッセージ" />
</StackPanel>
次にボタンがクリックされた時の処理をPage.
private void Button_Click(object sender, RoutedEventArgs e)
{
messageTextBlock.Text = "Hello world";
}
UIのテストコードを追加
さっそくテストコードを記述したいところですが,
今回取り上げているテスティングフレームワークはキーボードやマウス操作のシミュレートを行うことはできません。そのため,
具体的には対象となるクラス,
/// <summary>
/// for test
/// </summary>
internal void SimulateButtonClick()
{
Button_Click(messageButton,new RoutedEventArgs());
}
ここではSimulateButtonClickというメソッドを定義し,
このSimulateButtonClickメソッドはinternalで定義されています。このメソッドを別のアセンブリであるテストプロジェクトのアセンブリから呼び出せるように,
[assembly: InternalsVisibleTo("SLUnitTest.Tests")]
上記のInternalVisivleTo属性を設定することで,