始めよう!Silverlight

第7回Silverlightで単体テスト(前編)

はじめに

今回は、Silverlightで単体テストを行うためのテスティングフレームワークとその使い方を紹介します。テスティングフレームワークとはjUnitやNUnitなどに代表されるテストプログラムを書くためのフレームワークです。前編の今回は、導入と環境の構築、そして簡単なAPIのテストを説明します。

Silverlightのテスティングフレームワーク

.NETでのテスティングフレームワークはオープンソースで開発されているNUnitやVisual Studio 2008以上のエディションで提供されている単体テスト機能がよく利用されています。Silverlightのテスティングフレームワークはこの連載の第4回でも少しふれましたが、公開されているコントロールのソースコードの中にアセンブリの形で配置されています。コントロールのソースコードは以下のリンクよりダウンロードできます。

ダウンロードしたファイルをインストールしてできたフォルダの中のControls/Binの下にある以下のファイルがテスティングフレームワークのアセンブリになります。

  • Microsoft.Silverlight.Testing.dll
  • Microsoft.Silverlight.Testing.Framework.dll
  • Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll

コントロールに付属のテストコードもVisual Studioより簡単に起動できますので、ぜひ一度動かしてみてください。以下はコントロールのテストの実行中のスナップショットです。

画像

右側に実行中のテストとその結果、左側にテストされている画面が表示されています。

環境の構築

では、開発環境の構築を行います。若干、手作業が伴いますのでひとつづつ順番に説明していきます。

まず、最初に先述したテスティングフレームワークの3つのアセンブリを以下のフォルダにコピーします。

%programfiles%\Microsoft SDKs\Silverlight\v2.0\Libraries\Client

続いてJeff Wilcox氏のブログよりVisual Studioでこのテスティングフレームワークを使う場合のプロジェクトとC#のテンプレートをダウンロードします。氏のブログではテンプレートを用いない方法も紹介されていますが、本連載では簡便さからテンプレートをしようします。

ダウンロードしたファイルをそれぞれ以下の場所に保存します。このときダウンロードしたファイルの解凍は必要ありません。

SilverlightTestProject.zip
%userprofile%\Documents\Visual Studio 2008\Templates\ProjectTemplates
SilverlightTestClass.zip
%userprofile%\Documents\Visual Studio 2008\Templates\ItemTemplates

以上で配置は完了です。これで次回Visual Stuioを開いたときにプロジェクトのテンプレートとしてSilverlightのテストプロジェクトを選択できるようになっています。

では、プロジェクトの作成に移りましょう。

プロジェクトを作成する

まず、最初はテストされるSilverlightプロジェクトと、そのSilverlightをホストするためのWebアプリケーションを作成します。このステップは特に変わった手順はありません。詳しい作成方法はこの連載の第5回を参照してください。ここでは画面ショットと、そこでの設定だけを示します。

画像
プロジェクト名 SLUnitTest
ソリューション名 SLUnitTest
ソリューションのディレクトリを作成 チェック
画像
コントロールをホストするための新しいWebをソリューションに追加する チェック
プロジェクトの種類 Webアプリケーションプロジェクト
名前 SLUnitTest_Web

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

続いて先ほど作成したSilverlightアプリケーションをテストするためのテストプロジェクトを作成します。メニューの[ファイル] - [追加]より[新しいプロジェクト]を選択し、[新しいプロジェクトの追加]ダイアログを表示します。

画像

以下の内容で設定を行い、最後に[OK]ボタンをクリックしてプロジェクトを作成します。

プロジェクトの種類 Visual C#
テンプレート Silverlight Test Project
プロジェクト名 SLUnit.Tests

作成されたプロジェクトの参照設定を確認してみてください。先ほど設定したテスティングフレームワークのアセンブリが読み込まれています。

画像

続いてテストプロジェクトをWebアプリケーションでホストするように設定します。SLUnitTest_Webプロジェクトを右クリックして、コンテキストメニューより[Silverlightリンクの追加]を選択して、ダイアログを表示します。

画像

以下の内容で設定を行い、最後に[追加]ボタンをクリックして、Silverlightリンクを追加します。

リンクするプロジェクト SLUnitTest.Tests
宛先フォルダ /
コントロールを参照するテストページを追加する チェック
Silverlightデバッグを有効にします。 チェック

WebプロジェクトにテストプロジェクトのSilverlightアプリケーションをホストするSLUnitTest.TestsTestPage.aspxとSLUnitTest.TestsTestPage.htmlが追加されした。このどちらかのファイルを右クリックしてコンテキストメニューより[スタートページに設定]を選択してください。Visual Stuioでの開始時に、いま選択したページから開始されるようになります。

以上で、テストプロジェクトの設定が完了しました。早速起動してみましょう。メニューより[デバッグ] - [デバッグ開始]を選択して、起動してください。

画像

残念ながらREDが表示されてしまいました。これは標準で準備されているテストが失敗するテストのためです。

では、これを成功するテストに変更しましょう。テストプロジェクトのTestクラスを開けてください。その中にある TestMethodを削除して、以下のコードに変更してください。

[TestMethod]
public void TestMethod()
{
Assert.IsTrue(true);
}

変更が完了したら、再度実行してください。今回はGREENが表示されたかと思います。

画像

APIのテスト

今回の最後にAPIのテストを書いてみましょう。テストの内容は以下の通りです。

  • GreetingクラスのGetMessageメソッドがHello worldと返すことを確認する。

いつものようにHello worldです。まずは、テストプロジェクトにSilverlightプロジェクトの参照を追加してください。テストプロジェクトを右クリックして、[参照の追加]を選択し、[プロジェクト]タブより[SLUnitTest]を選択します。

次に、SilverlightプロジェクトにGreetingクラスを追加します。クラスの追加ができたら以下のメソッドを追加してください。

public string GetMessage()
{
return "Hello world";
}

ここで、テストプロジェクトにSilverlightプロジェクトの参照を追加してください。テストプロジェクトを右クリッ続いて、テストプロジェクトにGreetingクラスをテストするGreetinTestクラスを追加します。コンテキストメニューなどから[新しい項目の追加]ダイアログを起動してください。[カテゴリ]が[Visual C#]の中のテンプレートのマイテンプレートに最初に追加した[Silverlight Test Class]があります。それを選択してファイル名にGreetingTestと入力して[追加]をクリックします。

画像

今追加したGreetingTestを開いて、デフォルトで定義してあるTestMethodを削除して、代わりに以下のメソッドを追加してください。

[TestMethod]  //(1)
public void GreetingのGetMessageはHelloworldをかえすべき()
{
//(2)
Assert.AreEqual("Hello world", new Greeting().GetMessage());
}

上記メソッドはGreetingクラスのGetMessageの仕様をテストしています。コードの(1)の部分はTestMethodAttributeの宣言で、この属性が付加されているメソッドがテスト実行時に呼ばれます。コードの(2)の部分は検証を行っている部分です。Assert.AreEqualは第1引数に期待する値、第2引数に実際の値を設定します。ここではGreetingクラスのGetMessageメソッドがHello worldであることを検証しています。

それでは、実行してみます。正常にGREENが表示されたら成功です。

画像

次回予告

今回はテスティングフレームワークの環境の構築とAPIのテスト方法を紹介しました。APIのテストは他のテスティングフレームワークとほとんど変わらない形で書くことが可能です。

次回の後編では、SilverlightらしいテストということでUIのテストと非同期のテストをご紹介します。今回の熱が冷めないうちに、いつもの連載間隔より短い期間で掲載したいと考えています。お楽しみに。

おすすめ記事

記事・ニュース一覧