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); }
ちゃんとエラーになりますね!