Silverlight の UnitTest 実行が簡単になるツールの紹介

結構前に書いたのですが、Silverlight の UnitTest Runner はブラウザー上で無いと実行出来ず、結果もブラウザーに出力という貧弱なものでした。
Silverlight Unit Test Runner について - お だ のスペース
これが Silverlight2 の時の話です。で、このまえ Tech Ed の BoF で似た様な話しが出てました。Silverlight4 になっても相変わらずなんですね〜、って事で少し調べてみました。


するとこんなツールが見つかりました。
Silverlight Testing Automation Tool - Home
作者のブログなのかな?これを見る限り、コンソールから .xap ファイルを渡して動かしてますね。
C#er : IMage: Automated Silverlight Unit Testing Using StatLight


ってことで試してみました。
UnitTest Framework は Silverlight Toolkit - Home を使っています。

テスト対象のページ MainPage.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication2
{
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
      InitializeComponent();
    }

    internal void button1_Click(object sender, RoutedEventArgs e)
    {
      this.textBlock1.Text = (int.Parse(this.textBox1.Text) + int.Parse(this.textBox2.Text)).ToString();
    }

  }
}

テストクラス

using System.Windows;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SilverlightApplication2;

namespace SilverlightTest1
{
  [TestClass]
  public class Tests
  {
    [TestMethod]
    public void TestMethod1()
    {
      MainPage m = new MainPage();
      m.textBox1.Text = "10";
      m.textBox2.Text = "20";
      m.button1_Click(m.button1, new RoutedEventArgs());
      Assert.AreEqual("30", m.textBlock1.Text);
    }
  }
}

これを普通に実行すると(TestPage.html を開く)とこんな感じ

お〜 2 の頃より格段にキレイになってる!
でこれを、StatLight で動かしてみます。こんな感じのコマンドです。

statlight -x="<テスト用Silverlightの .xap ファイル>" -r="<レポート出力パス>"


すると、次のような StatLight 画面が立ち上がりテストを実行しています。

StatLight ってのがブラウザーをホストしてテストを実行しているようです。
結果の XML はこんな感じ。

<StatLightTestResults xapFileName="C:\Users\user\Documents\Visual Studio 2010\Projects\SilverlightApplication2\SilverlightTest1\Bin\Debug\SilverlightTest1.xap" total="1" ignored="0" failed="0" dateRun="2010-09-07 21:31:35">
  <tests>
    <test name="SilverlightTest1.Tests.TestMethod1" resulttype="Passed" timeToComplete="00:00:00.0048840" />
  </tests>
</StatLightTestResults>

注意する事は、StatLight を実行するときは、管理者モードで動かして下さい。管理者モードで無いと、エラーが出ました。


ってか Silverlight 久しぶりで全然憶えてない。。