All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET技巧:脚本获取选中文字及所在句子_.net资料_编程技术
Windows,Server,2003,安全配置实战演习_[SQL,Server教程]
ASP.Net中利用CSS实现多界面两法_[Asp.Net教程]
ADO.NET,2.0:如何排除错误信息_.net资料_编程技术
C#中DateTimePicker控件应用实例
C#,如何获取图片长宽_[Asp.Net教程]
SQL,server,2005中的DATENAME函数_[SQL,Server教程]
XSL教程:匹配模式的学习_[XML教程]
asp.net2.0创建主题外观文件
把WebForm数据导出到Excel中_[Asp.Net教程]
Reading number is top 10 pictures
The real super beauty5
Female model behind the bitterness, often being overcharged1
The real super beauty2
治疗多发性骨髓瘤的特效药,一万二一支
狗狗与主人神同步1
Sora aoi on twitter2
The money of more than 100 countries and regions12
西班牙山村小景4
海底兵马俑
Exquisite decoration is not paying too much4
Download software ranking
Kung.Fu.Panda.2
Tram sex maniac 2 (H) rar bag2
Be there or be square
Ashlynn Video5
少妇苏霞全本
apache-tomcat-6.0.33
在线棋牌游戏3.05版
Boxer vs Yellow2
Tram sex maniac 2 (H) rar bag11
SP4 for SQL2000
归海一刀 published in(发表于) 2014/3/16 2:53:46 Edit(编辑)
使用WatiN对ASP.NET页面进行单元测试_[AJAX教程]

使用WatiN对ASP.NET页面进行单元测试_[AJAX教程]

使用WatiN对ASP.NET页面进行单元测试_[AJAX教程]

引言


单元测试是应用程序设计的一个重要部分,它可应用于程序的多个层次。本文将主要关注用户界面层的单元测试。我们将使用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)]
public class TestAgreementPage
{
 [Test]
 public void TestCanAcceptUserAgreement()
 {
 IE ie = new IE(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”。加上这段代码:


protected void btnAgree_Click(object sender, EventArgs e)
{
 lblMessage.Text = "Valid";
}

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

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



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


protected void btnAgree_Click(object sender, 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


好了,现在来看看如何在单元测试中打开服务器。首先,添加必要的配置(App.config中)。


 
 
 
 
 
 




BaseTestPage类可以通过这些信息运行服务器,所有继承了它的测试类都可以使用这个功能了。


下面是BaseTestPage类的完整代码:


public class BaseTestPage
{
 static Process server = null;
 
 static BaseTestPage()
 {
 if (Process.GetProcessesByName("WebDev.WebServer").Length == 0)
 {
 string webServerExePath = (string)ConfigurationManager.AppSettings["WebServerExePath"];
 server = new Process();
 Process.Start(webServerExePath, GetWebServerArguments());
 }
 }
 
 public static string GetWebServerArguments()
 {
 string args = String.Format("/port:{0} /path:\"{1}\"", GetPort(), GetWebApplicationPath());
 if (String.IsNullOrEmpty(args)) throw new ArgumentNullException("Arguments is not defined");
 return args;
 }
 
 public static string GetPort()
 {
 string port = ConfigurationManager.AppSettings["Port"] as String;
 if (String.IsNullOrEmpty(port)) throw new ArgumentNullException("Port is null or empty");
 
 return port;
 }
 
 public static string GetWebApplicationPath()
 {
 string webApplicationPath = ConfigurationManager.AppSettings["WebApplicationPath"] as String;
 if (String.IsNullOrEmpty(webApplicationPath)) throw new ArgumentNullException("WebApplicationPath is null or empty");
 
 return webApplicationPath;
 }
}

如果服务器没有运行,我们会新建一个进程运行它,否则就使用已有的进程。GetWebServerArguments()、GetPort()和GetWebApplicationPath()仅仅是辅助方法,可以提高可读性。


最后,你可以让单元测试类继承该类:


public class TestAgreementPage : BaseTestPage


现在,运行单元测试项目时,它会运行WebServer,然后再执行所有测试。


结论:


在本文中,我们学习了如何对用户界面层进行单元测试,这些测试可帮助我们理解UI的需求,并快速地看到基于用户输入所得到的结果。而如果手动进行测试,就要花费很多时间了。


源码:点击这里

本文翻译自:Unit Testing ASP.NET Pages Using WatiN


来源:http://www.cnblogs.com/anderslly







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.