知识大全 用WatiN对ASP.NET页面进行单元测试
Posted 知
篇首语:少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用WatiN对ASP.NET页面进行单元测试相关的知识,希望对你有一定的参考价值。
用WatiN对ASP.NET页面进行单元测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
单元测试是应用程序设计的一个重要部分 它可应用于程序的多个层次 本文将主要关注用户界面层的单元测试 我们将使用WatiN 测试ASP NET应用程序
什么是WatiN?
WatiN 是一个源自Watir的工具 用于测试Web页面 WatiN表示Web Application Testing in NET
我们要测试什么?
在本文中我们将测试一个简单的ASP NET页面 用这个页面来演示认同 接受(agreement acceptance)的场景 用户在文本框中输入名字 点击 I agree 复选框 然后按下submit按钮 这显然是一个非常简单的页面 在你熟悉了WatiN框架的工作机制后 就可以将这里的理念用于大型页面的测试了
测试认同(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( cAgree ) 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来引用控件 这一行ie TextField( txtName ) TypeText( Mohammad Azam ) 引用了id为 txtName 的文本框 浏览器加载后 WatiN会将值 Mohammad Azam 写入id为 txtName 的文本框 这个过程在测试时你会看到的 然后id为 cAgree 的复选框会被选中 最后 WatiN会按下提交按钮 窗体被提交
运行测试 失败 因为名为 lblMessage 的Label从未被赋值为 Valid 加上这段代码
protected void btnAgree_Click(object sender EventArgs e) lblMessage Text = Valid ; 现在 如果你运行测试它会通过 但是 好像不太正确 如果我们把这一行测试代码删掉
ie CheckBox( cAgree ) Checked = true; 再次运行测试 依然能通过 这可不对!应当只有在CheckBox选中时才可通过 将页面的Code behind代码改一下
protected void btnAgree_Click(object sender EventArgs e) if (cAgree Checked) lblMessage Text = Valid ; 现在 测试只有在CheckBox选中时才可通过了
以编程方式运行Web服务器
在上例中我们需要运行WebServer 要么是通过命令行工具 要么是通过运行Web项目 但有时我们需要单元测试项目能够动态打开一个WebServer 一起来看看
首先 如果你需要打开ASP NET内部服务器(WebDev WebServer) 可以使用命令行 语法如下
WebDev WebServer exe /port: /path: C:\\Projects\\MyWebApplication
需要定位到WebDev WebServer所在的目录 默认情况下它在
C:\\WINDOWS\\Microsoft NET\\Framework\\v \\WebDev WebServer exe
好了 现在来看看如何在单元测试中打开服务器 首先 添加必要的配置(App config中)
BaseTestPage类可以通过这些信息运行服务器 所有继承了它的测试类都可以使用这个功能了
下面是BaseTestPage类的完整代码
public class BaseTestPage static Process server = null; static BaseTestPage() if (Process GetProcessesByName( WebDev WebServer ) Length == ) string webServerExePath = (string)ConfigurationManager AppSettings[ WebServerExePath ]; server = new Process(); Process Start(webServerExePath GetWebServerArguments()); public static string GetWebServerArguments() string args = String Format( /port: /path:\\ \\ 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 然后再执行所有测试
结论
cha138/Article/program/net/201311/15476相关参考
知识大全 ASP.NET 3.5核心编程之利用页面方法来进行远程调用
ASP.NET3.5核心编程之利用页面方法来进行远程调用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
用脚本解决ASP.NET页面刷新问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用ASPNE
用VS.NET中的测试工具测试ASP.NET程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET页面选项进行提示判断 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 下面分二种情况
ASP.NET中如何对页面输出缓存 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz
目前进行net学习的很多学员对于aspnet跳转页面的几种方法不是很清楚了解aspnet跳转页面的三种方法对于以后的编程会有很大帮助下面我们就来看一下 responseredirect这个跳转页
ASP.NET揭秘ASP.NET页面的结构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!TheSt
Asp.Net中动态页面转静态页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于在AspN
知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期
IIS处理Asp.net请求和Asp.net页面生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
ASP.NET页面间数据传递 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!引言 Web页面是无状