使用WatiN对ASP.NET页面进行单元测试

发表于:2008-4-10 14:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Anders    来源:Anders .NET Space

分享:

引言

        单元测试是应用程序设计的一个重要部分,它可应用于程序的多个层次。本文将主要关注用户界面层的单元测试。我们将使用WatiN 测试ASP.NET应用程序。

什么是WatiN?

        WatiN 是一个源自Watir的工具,用于测试Web页面。WatiN表示Web Application Testing in .NET。

我们要测试什么?

        在本文中我们将测试一个简单的ASP.NET页面,用这个页面来演示认同、接受(agreement acceptance)的场景。用户在文本框中输入名字,点击“I agree”复选框,然后按下submit按钮。这显然是一个非常简单的页面,在你熟悉了WatiN框架的工作机制后,就可以将这里的理念用于大型页面的测试了。

        这里是待测页面的截图:

WatiNImage1

测试认同(Agreement)页面:

        向解决方案添加一个类库项目,并为其添加对测试工具(我这里用的是MbUnit,但你完全可以使用NUnit或VSTS的测试项目)和WatiN库的引用。你可以在这里下载WatiN。

        下面的测试代码用来确保用户已经认同。

[TestFixture(ApartmentState = ApartmentState.STA)]
publicclassTestAgreementPage
{
[Test]
publicvoidTestCanAcceptUserAgreement()
{
IE ie =newIE(ConfigurationManager.AppSettings["DefaultPageUrl"]);
ie.TextField("txtName").TypeText("Mohammad Azam");
ie.CheckBox("chkAgree").Checked =true;
ie.Button("btnAgree").Click();
 
Assert.AreEqual("Valid", ie.Span("lblMessage").Text);
}
}

        这个类有TestFixture特性(Attribute),STA值确保该测试运行于STA(Single Threaded Apartment)状态下。这是因为测试代码要加载IE。

        WatiN中的IE类完成了主要工作。IE类打开IE,通过name或id来引用html控件。这一行ie.TextField("txtName").TypeText("Mohammad Azam"),引用了id为“txtName”的文本框。浏览器加载后,WatiN会将值“Mohammad Azam”写入id为“txtName”的文本框。这个过程在测试时你会看到的。然后id为“chkAgree”的复选框会被选中。最后,WatiN会按下提交按钮,窗体被提交。

        运行测试,失败。因为名为“lblMessage”的Label从未被赋值为“Valid”。加上这段代码:

protectedvoidbtnAgree_Click(objectsender, EventArgs e)
{
lblMessage.Text ="Valid";
}

        现在,如果你运行测试它会通过。但是,好像不太正确。如果我们把这一行测试代码删掉:

ie.CheckBox("chkAgree").Checked =true;

        再次运行测试,依然能通过。这可不对!应当只有在CheckBox选中时才可通过。将页面的Code behind代码改一下。

protectedvoidbtnAgree_Click(objectsender, EventArgs e)
{
if(chkAgree.Checked)
{
lblMessage.Text ="Valid";
}
}

        现在,测试只有在CheckBox选中时才可通过了。

以编程方式运行Web服务器:

        在上例中我们需要运行WebServer,要么是通过命令行工具,要么是通过运行Web项目。但有时我们需要单元测试项目能够动态打开一个WebServer。一起来看看。

        首先,如果你需要打开ASP.NET内部服务器(WebDev.WebServer),可以使用命令行。语法如下:

WebDev.WebServer.exe /port:1950 /path:"C:\Projects\MyWebApplication"

        需要定位到WebDev.WebServer所在的目录,默认情况下它在:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.exe

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号