Webのユニットテスト③ .NET

前回の続きです。
Default.aspxをテストするクラスを作ってみます。

DefaultTest.cs

Seleniumインスタンスを使って、ブラウザを操作しながらテストしていきます。
Javaで作ったものをひたすら.NETに移植していきます。

using System;

using NUnit.Framework;
using NDbUnitSample;
using NDbUnitSampleTest;
using NDbUnit.Core.SqlClient;

namespace WebAndNDbUnitSampleTest
{
    [TestFixture]
    class DefaultTest
    {
        private const string XSD_PATH = "testdata/WebAndNDbUnitSampleTest/userInfo.xsd";

        private DbTester dbTester = new DbTester(new SqlDbUnitTest(Dbcp.GetInstance().ConnectionString));
        private WebTester webTester = new WebTester();

        [SetUp]
        public void SetUp() {

            // データベースの初期化
            this.dbTester.InitDb(XSD_PATH, "testdata/WebAndNDbUnitSampleTest/init.xml");

            // Seleniumの初期化
            this.webTester.SetUp();
        }
        
        [TearDown]
        public void TearDown() {
            this.webTester.TearDown();
        }
        
        [Test]
        public void ClickSearchButton() {
            
            // ブラウザで表示
            this.webTester.Open("Default.aspx");
            
            // 検索ボタン押下
            this.webTester.GetSelenium().Click("Button1");
            
            // ページ再表示まで待機
            this.webTester.GetSelenium().WaitForPageToLoad("3000");
            
            // 表示されたテーブルを確認
            string[][] expected = new string[][] { new string[]{ "1", "userA" }, new string[]{ "2", "userB" }, new string[]{ "3", "userC" } };
            HtmlTableAssert.AssertEquals(this.webTester.GetSelenium(), "table[@id='GridView1']", expected);
        }
    }
}

テストデータXMLファイルの中身

以前に作ったものをそのまま使っています。


■userInfo.xsd(テーブル定義)

<?xml version="1.0" standalone="yes"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="userInfo">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="id" type="xs:int" minOccurs="0" />
              <xs:element name="name" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>


■init.xml(テスト実行前の初期状態)

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <userInfo>
    <id>1</id>
    <name>userA</name>
  </userInfo>
  <userInfo>
    <id>2</id>
    <name>userB</name>
  </userInfo>
  <userInfo>
    <id>3</id>
    <name>userC</name>
  </userInfo>
</NewDataSet>

Visual Studioから実行してみる


まずはプロパティ画面で開発サーバのポート番号を固定にしておいて、
F5 or Ctrl+F5を実行して、開発サーバを起動しておきます。



以下のコマンドでSeleniumServerを起動しておきます。

java -jar selenium-server.jar


Visual Studioからテストを実行してみます。実行方法は以前と同じです。
テストを実行するとSeleniumがブラウザを表示して、勝手に検索ボタンを押します。



わざとエラーにしてみます。
clickSearchButtonメソッドの期待値を変更して実行すると・・・

 [Test]
 public void ClickSearchButton() {
            
   // ブラウザで表示
   this.webTester.Open("Default.aspx");
            
   // 検索ボタン押下
   this.webTester.GetSelenium().Click("Button1");
            
   // ページ再表示まで待機
   this.webTester.GetSelenium().WaitForPageToLoad("3000");
            
   // 表示されたテーブルを確認
   //string[][] expected = new string[][] { new string[]{ "1", "userA" }, new string[]{ "2", "userB" }, new string[]{ "3", "userC" } };
   string[][] expected = new string[][] { new string[]{ "1", "userA" }, new string[]{ "2", "HOGEHOGE" }, new string[]{ "3", "userC" } };
   HtmlTableAssert.AssertEquals(this.webTester.GetSelenium(), "table[@id='GridView1']", expected);
}


ちゃんとエラーになりますね!