• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用WatiN對ASP.NET頁面進行單元測試

    發布: 2008-4-09 14:10 | 作者: lina | 來源: 希賽網收集整理 | 查看: 171次 | 進入軟件測試論壇討論

    領測軟件測試網 單元測試是應用程序設計的一個重要部分,它可應用于程序的多個層次。本文將主要關注用戶界面層的單元測試。我們將使用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("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的需求,并快速地看到基于用戶輸入所得到的結果。而如果手動進行測試,就要花費很多時間了。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>