欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

解析ASP.NET MVC項目中視圖的單元測試_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:談.NET平臺編程語言的未來
在去年的PDC2008召開期間,微軟逐步公開了圍繞.NET和編程語言的很多想法,據此我們可以饒有興趣地對.NET的未來預測一番。 .NET平臺以運行在通用語言運行時(Common Language Runtime,CLR)上的C#和VB.NET作為開端。CLR是通用語言架構(Common Language Infrast

關于視圖的單元測試

說到ASP.NET MVC,我們似乎始終都在關注對于Controller的測試——雖然Stephen Walther也寫過如何脫離Web Server對View進行單元測試,但是他的方法可看而不可用。復雜的構造和預備,以及對生成的HTML字符串作判斷——這真是在對視圖做單元測試嗎?仔細分析他的代碼可以發現,這其實是在對ViewEngine做單元測試。而且,如果真要對ViewEngine做單元測試,也不應該像他那樣依賴外部文件。在我看來,他的做法什么都不是……似乎美觀,似乎能博得一些“掌聲”,但是這個掌聲是來自于他的解決方案,還是大家一時的沖動呢?

如果要對視圖做單元測試,還是要將內容呈現在瀏覽器中才行。在對網頁做單元測試時,我們一般會使用WatiN等工具操作瀏覽器,打開頁面,再對其DOM元素結構及內容作斷言。不過……這是單元測試嗎?可惜這只能算是一種回歸測試或用戶驗收測試。因為,我們在打開一個頁面的時候,從表現層到業務邏輯再到數據訪問,應用程序的每個部件都在忙碌著。而單元測試講究的是“分離”,分離一切關注,分離一切依賴。因為分離,我們才能準確定位錯誤;因為分離,我們才能在測試中使用我們準備好的數據。

既然要分離,我們就必須遵循一定的使用規范。在《ASP.NET MVC單元測試最佳實踐》中我提到,在View中只能使用ViewData中的數據,而不該依賴其他內容(包括HttpContext)。這樣我們就可以自行構造ViewData并注入一個視圖對象中。事實上,這個約定在ASP.NET MVC自帶的項目模板中就被破壞了。請看Views\Shared\LogOnUserControl.ascx,其中通過this.User來查看當前用戶的登陸狀態。這是個定義在傳統Page對象上的屬性,從當前HttpContext上直接獲取。如果使用這種方式,我們在單元測試時就難以“模擬”當前用戶的登陸狀態,進而難以使測試覆蓋到測試的各種情況了。

Lightweight Test Automation Framework

在這里,老趙推薦使用ASP.NET Team提供的Lightweight Test Automation Framework(下文稱之為LTAF)作為測試工具,它目前已經在CodePlex上更新至Feb Update版本。這個框架的作用與WatiN和Selenium類似,可操作瀏覽器對應用程序編寫回歸測試。雖然在某些方面(例如DOM元素的選取)不如“競爭對手”,但是LTAF自有其獨到之處:

由于直接在瀏覽器中運行,它天生便支持現有的——以及未來可能出現的任意瀏覽器。
由于直接部署在被測試的網站中,因此測試代碼和網站頁面是在同一個進程中。

第一點優勢自不必說,而第二點更是關鍵。試想WatiN和Selenium,都是通過編寫代碼在瀏覽器中打開頁面。這意味著我們的在測試代碼和被測試的網頁分別在不同的進程中。在這個前提下,如果我們要將測試代碼中定義的數據傳遞給被測試的網頁(也就是視圖對象),我們就必須進行跨進程的通信。而無論怎么實現,都逃不過“序列化”一途,這無疑增加了復雜度。而使用LTAF之后,這個問題瞬間煙消云散了,因為我們可以直接在內存中“傳遞”測試數據,一切都只是個引用而已。

不過任何事物都具有兩面性,LTAF也有一些難以天生的,而且是永遠無法彌補的缺點。例如:

由于LTAF將待測試的頁面放置在Frame中,因此該頁面上的window.top等基于瀏覽器frame結構的屬性會被改變。

由于LTAF的本質是使用JavaScript來操作DOM,這意味著任何會阻塞程序進行的操作(例如alert)都不能使用,否則將阻塞整個測試過程。

不過幸運的是,這兩點都不回成為嚴重的問題。對于第一種,我們只需要編寫一個自定的getTop方法來替換直接訪問windows.top的做法即可。而第二種情況——老趙從來不喜歡alert或confirm這種“純瀏覽器功能”,因為它們會帶來很差的用戶體驗,更何況現在的JavaScript類庫/框架都能很輕松的做出這種效果,您覺得呢?

LTAF的具體使用方式可參考其Release Note。令人奇怪的是,老趙發現直接在項目中使用LTAF會有一些小問題(不過它的示例為什么就一切正常呢?),因此進行了一些細微的修改。請注意~\UnitView\DriverPage.aspx文件尾部的一些JavaScript代碼。

UnitView的使用

于是老趙編寫了一個組件UnitView,方便我們構造一個單元測試時所需的數據。有了數據,便能夠直接將視圖在瀏覽器中加以呈現了。例如:

[WebTestClass]

public class HomeTests

{

[WebTestMethod]

public void LoggedOnIndexTest()

{

var data = new TestViewData

{

ControllerName = "Home",

ActionName = "Index",

Model = new IndexModel

{

Message = "Welcome guys!",

Identity = new UserIdentity

{

IsAuthenticated = true,

Name = "Jeffrey Zhao"

}

}

};

HtmlPage page = new HtmlPage(TestViewData.GenerateHostUrl(data));

// Assert title

Assert.AreEqual("Home Page", page.Elements.Find("title", 0).GetInnerText());

// Assert head element

var mainContent = page.Elements.Find("main");

var head2 = mainContent.ChildElements.FindAll("h2").Single();

Assert.AreEqual(data.Model.Message, head2.GetInnerText(), "Message should be displayed.");

var loginTabInnerText = page.Elements.Find("logindisplay").GetInnerTextRecursively();

Assert.IsTrue(loginTabInnerText.Contains("Welcome"), "'Welcome' missed.");

Assert.IsTrue(loginTabInnerText.Contains(data.Model.Identity.Name), "Login name missed.");

}

}

自然,Web Server是不可或缺的。幸運的是,分離讓我們的視圖只會涉及最簡單的測試數據,這樣VS自帶的簡單Web Server就足夠了。在上面的代碼中,我們直接構造了強類型的TestViewData對象,它包含呈現一個視圖所需要的所有數據:

Cotroller和Action名稱。從理論上說,由不同的Controller和Action進入同樣的視圖可能會得到不同的結果。

View和Master名稱。如果省略,則表明將使用默認的視圖,即通過Controller和Action的值來確定。

ViewData和Model。

TestViewData.GenerateHostUrl方法會把data保存起來,并返回一個URL。訪問該URL便能夠得到對應的視圖內容。

如果您想使用UnitView,可以從上面的鏈接中下載UnitView的源代碼和示例在本機進行嘗試。使用UnitView時主要有以下幾個注意點:

將Tests項目的輸出路徑指向被測試網站的bin目錄,這樣既可以在運行時得到正確的程序集,又不必為網站添加多余的引用。
將~\UnitView目錄復制到您的網站根目錄下(在發布網站時,請剔除該目錄)。如果想使用其它目錄,請關注接下來UnitView實現分析。
編輯~\UnitView\Web.config文件,將MvcApp.Tests.dll修改為您自己的包含測試代碼的程序集。

UnitView實現分析

UnitView組件非常簡單,簡單地幾乎不值一提。TestViewData類型包含了測試需要的所有數據,而TestViewData繼承了TestViewData,提供了強類型的Model屬性訪問方式。它們就不作分析了。

分享:ASP.NET如何防止用戶多次登錄
常見的處理方法是,在用戶登錄時,判斷此用戶是否已經在Application中存在,如果存在就報錯,不存在的話就加到Application中(Application是所有Session共有的,整個web應用程序唯一的一個對象): 以下是引用片段: string strUserId = txtUser.Text; ArrayLi

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時間:2009-05-16
相關.Net教程
久久久久久国产精品mv| 色综合婷婷久久| 久久久成人精品| 国产精品久久久影院| 久久久久久久久久久网| 亚洲aa在线| 国产精品三级av| 欧美高清videos高潮hd| 99久久久无码国产精品6| 最近日韩免费视频| 欧美日韩影院| 91久久精品一区二区| 国产一区在线播放| 中文字幕天堂av| 国产成人精选| 高清在线不卡av| 一本色道久久88综合日韩精品| 国产日韩欧美大片| 色屁屁影院www国产高清麻豆| 亚洲高清影视| 日本精品视频一区二区三区| 99久热re在线精品视频| 熟女高潮一区二区三区| 涩爱av色老久久精品偷偷鲁| 国产午夜精品一区二区| 欧美丰满少妇xxxxx| 日韩区在线观看| 欧美裸身视频免费观看| www黄色在线| 精品国产伦一区二区三区| 久热re这里精品视频在线6| 日韩亚洲欧美中文三级| 日韩精品另类天天更新| 日本一区二区欧美| 亚洲欧洲美洲一区二区三区| 欧美伊人久久久久久午夜久久久久| 国产伦精品一区二区| 小早川怜子一区二区的演员表| 午夜精品福利影院| 亚洲午夜国产一区99re久久| 国产女人18毛片水18精品| 看全色黄大色黄女片18| 天堂va欧美ⅴa亚洲va一国产| 中文字幕欧美三区| 欧美综合第一页| 在线xxxxx| 高清精品视频| 亚洲在线视频免费观看| 91深夜福利视频| 中文字幕91视频| 国产亚洲一区| 色老综合老女人久久久| 精品综合在线| 四虎永久在线精品| 日韩亚洲国产欧美| 亚洲第一国产精品| 999在线观看视频| 欧美综合视频在线| 性爱在线免费视频| 欧美aa视频| 久久这里都是精品| 欧洲中文字幕国产精品| 粉嫩av蜜桃av蜜臀av| 国产不卡一区| 日本电影亚洲天堂一区| 欧洲亚洲一区二区| 嫩草影院一区二区三区| 奇米影视一区二区三区| 日韩中文字幕在线看| 中文av一区二区三区| 欧美成人家庭影院| 日韩毛片精品高清免费| 国产精品亚洲网站| 老司机成人免费视频| 五月婷婷亚洲| 欧美大片免费久久精品三p | 欧美成人一二三区| 综合久久精品| 亚洲国产成人精品久久| 1024av视频| 第四色男人最爱上成人网| 国产精品污网站| 91精品在线观| 久久久国产成人| 亚洲免费网站| 色悠悠久久久久| 国产亚洲欧美另类一区二区三区| 亚洲a∨一区二区三区| 一级片一区二区三区| 国产成人超碰人人澡人人澡| 91av视频在线| 992在线观看| 亚洲视频一区| 亚洲视频第一页| 91视频福利网| 午夜精品影视国产一区在线麻豆| 欧美日韩五月天| 人妻互换免费中文字幕| 日韩三区免费| 一区二区三区中文在线观看| 蜜桃av久久久亚洲精品| 99在线精品视频免费观看软件| 成人短视频下载| 国产精品一区av| 国产亚洲精品码| 免费久久99精品国产| 欧美大片免费观看| 久久免费精品国产| 欧美hd在线| 亚洲精品suv精品一区二区| 亚洲欧美国产中文| 日韩理论电影中文字幕| 91精品国产综合久久国产大片| 久久精品免费一区二区| 一区二区三区四区视频免费观看| 在线一区二区观看| 97碰在线视频| 国产95亚洲| 欧美影院一区二区| 青青青在线视频播放| 宅男噜噜噜66国产精品免费| 日韩欧美国产免费播放| 亚洲熟妇无码av在线播放| 开心久久婷婷综合中文字幕 | 在线天堂www在线国语对白| 欧美大片aaaa| 亚洲片在线观看| 亚洲国产日韩欧美在线动漫 | 欧美不卡在线| 亚洲性日韩精品一区二区| 中文字幕一区二区三区人妻在线视频| 欧美一二区在线观看| 欧美精品一区二区三区视频| 国内自拍第二页| 精品日本12videosex| 亚洲精品久久久久久下一站 | 欧美激情欧美狂野欧美精品| 极品色av影院| 麻豆国产欧美日韩综合精品二区| 57pao国产精品一区| 中文字幕第28页| 国产福利不卡视频| 亚洲aa在线观看| 亚洲天堂中文字幕在线| 国产精品久久福利| 污视频在线免费观看一区二区三区 | 亚洲欧美日韩专区| 性色av香蕉一区二区| 久久av高潮av无码av喷吹| 国产乱人伦精品一区二区在线观看 | 国产又黄又粗又硬| 中文字幕在线一区| 亚洲日本丝袜连裤袜办公室| 国产欧美日韩丝袜精品一区| 乱子伦一区二区三区| 欧美激情一区二区在线| 日本一区二区精品| 国产精品videossex撒尿| 在线视频国内自拍亚洲视频| 亚洲精品高清无码视频| 成人动漫免费在线观看| 最好看的2019年中文视频| 欧美亚洲色综久久精品国产| 麻豆国产一区二区| 成人久久18免费网站图片| 国产又色又爽又黄又免费| 亚洲男人电影天堂| 被灌满精子的波多野结衣| 免费成人三级| 亚洲人成在线观看| 亚洲午夜久久久久久久国产| 久久se精品一区精品二区| 亚洲精品女av网站| 免费国产精品视频| 91国产丝袜在线播放| 成人日韩在线视频| 好看的日韩av电影| 欧美亚洲激情视频| 午夜精品免费观看| 综合欧美一区二区三区| 久久久久久久免费视频| 全国精品免费看| 国产小视频国产精品| 日本不卡一二区| 成人av在线资源网站| 欧美一区1区三区3区公司| 日本久久二区| 亚洲国产精品久久精品怡红院| 国产伦精品一区二区三区妓女| 免费成人美女在线观看| 成人一区二区三区四区| 在线亚洲人成| 欧美一区二区三区在线观看| 挪威xxxx性hd极品| 理论电影国产精品| 高清国产在线一区| 粉嫩91精品久久久久久久99蜜桃 | 狠狠色丁香九九婷婷综合五月| 99re在线观看视频| 日日av拍夜夜添久久免费| 日韩一区二区三区四区| 日本黄色特级片| 国产精品18久久久久久vr| 欧美连裤袜在线视频| 日本在线成人| 国产亚洲精品va在线观看| 欧美黄色免费看| 欧美三级一区二区三区| 男人的天堂久久精品| 成人欧美一区二区三区视频xxx| 先锋欧美三级| 亚洲精品在线免费观看视频| 一本一本久久a久久| 91免费视频网| 男人添女人下部视频免费| 久久国产精品亚洲人一区二区三区 | 国产精品久久久久久久久晋中| 黄色一级在线视频| 欧美三级网页| 成人在线视频网| 国产综合色区在线观看| 日韩h在线观看| 91视频综合网| 中文字幕永久在线不卡| 狠狠热免费视频| 亚洲欧美日本视频在线观看| 99国产高清| а天堂中文最新一区二区三区| 亚洲剧情一区二区| 特一级黄色大片| 亚洲福利一二三区| 日韩a一级欧美一级| 六月丁香婷婷色狠狠久久| 欧美三级网色| 国产欧美一区二区精品久久久| 久久久久久综合网天天| 国产不卡精品视频| 91精品国产综合久久精品图片| www.日本高清视频| 国产亚洲成av人在线观看导航| 欧美亚洲国产成人| 国产亚洲网站| 精品日韩欧美| 秋霞影院一区二区三区| 午夜精品久久久久久久白皮肤 | 成人激情视频在线| 亚洲欧美在线成人| 在线观看日韩av| 五月婷婷激情五月| 91搞黄在线观看| 91网站免费视频| 国产女主播视频一区二区| 日韩免费高清在线| 青青草伊人久久| 日韩一区不卡| 91欧美大片| 91天堂在线观看| 日韩高清在线观看一区二区| 欧美精品在线免费观看| 欧美丰满熟妇bbb久久久| 天堂网2014av| 亚洲国产成人av在线| 男人的天堂一区二区| 欧美日韩亚洲网| 能免费看av的网站| 国产精品麻豆网站| 三级黄色片免费看| 99久久久久久| 日韩一级免费在线观看| 捆绑紧缚一区二区三区视频| 香蕉视频在线网址| 亚洲国产影院| 欧美乱偷一区二区三区在线| 日韩久久综合| 99电影在线观看| 亚洲精品中文字幕99999| 国产精品第100页| 91国产精品| 久久久久久久久久亚洲| 第四色男人最爱上成人网| 久久精品国产成人| 亚洲经典一区二区| 亚洲天堂成人在线视频| av手机免费看| 亚洲欧美日韩精品久久亚洲区 | 亚洲成在人线免费观看| 国产精品高精视频免费| 日本一区二区三区视频在线看| 97人人做人人爱| 日韩亚洲国产免费| 久久久在线观看| 成人精品一区二区三区电影| 欧美成人午夜激情在线| 超碰国产一区| 欧美成人午夜剧场免费观看| 粉嫩一区二区| 欧美大片免费观看| www.26天天久久天堂| 久久久久亚洲精品国产| 久久电影天堂| 久久久久久久久久国产| 欧美大片网站| 91精品国产精品| 伊人久久大香伊蕉在人线观看热v| 久久久久国产一区二区三区| 国产电影一区二区三区爱妃记| 欧美黄色www| 成人国产网站| 91禁国产网站| 欧洲精品99毛片免费高清观看| 热久久99这里有精品| 一区二区三区视频播放| 国产日韩欧美91| 国产精品欧美在线观看| 懂色一区二区三区av片| 99精品视频在线观看播放| 欧美影视一区二区| 亚洲国产影院| 日韩成人三级视频| 国内成+人亚洲+欧美+综合在线| 少妇性饥渴无码a区免费| 丁香激情综合国产| 夜夜夜夜夜夜操| 欧美国产欧美综合| 亚洲色图14p| 亚洲成人黄色影院| 91成人福利视频| 欧美丰满嫩嫩电影| 在线免费一级片| 中文字幕欧美国内| 91p九色成人| 日本sm极度另类视频| 久久电影在线| 国产视色精品亚洲一区二区| 欧美日韩理论| 亚洲激情免费视频| 国产一区二区三区四区五区入口| 91极品视频在线观看| 国产偷国产偷亚洲高清人白洁| 亚洲精品在线视频免费观看| 亚洲国产精品一区二区久久恐怖片| 糖心vlog免费在线观看| 欧美日韩一级二级| 波多野结衣小视频| 亚洲最大中文字幕| 成人精品动漫| 国产伦精品免费视频| 日韩在线中文| 一区二区三区国产福利| 久久精品二区亚洲w码| 色天使在线观看| 中文字幕一区日韩精品欧美| 日本爱爱小视频| 日韩欧美一区在线观看| 草草视频在线播放| 97精品视频在线| 亚洲v天堂v手机在线| 台湾成人av| 精品伊人久久久久7777人| 中文字幕第三区| 亚洲一二三区在线观看| av资源吧首页| 亚洲欧美制服第一页| 国产91在线播放精品| 91黄在线观看| 亚洲免费高清| 黄色一级二级三级| 亚洲免费av高清| 久久精品视频日本| 亚洲欧美日韩国产中文专区| 日本一区二区中文字幕| 亚洲影视九九影院在线观看| 99在线|亚洲一区二区| 国产xxxxx视频| 亚洲色图视频网站| 国产手机在线视频| 中文字幕日韩在线视频| 亚洲三级av| 女人一区二区三区| 国产真实乱对白精彩久久| 国产视频久久久久久| 欧美婷婷六月丁香综合色| 精品久久久中文字幕人妻| 8x拔播拔播x8国产精品| 日韩视频在线观看| 欧美精品久久久久久久自慰| 国产日产欧产精品推荐色| 午夜精品福利在线视频| 精品视频偷偷看在线观看| **国产精品| 精品久久久三级| 韩国精品免费视频| 国模私拍在线观看| 9191成人精品久久| 成人性生活av| 999精品视频一区二区三区| 日韩二区在线观看| 国产午夜在线一区二区三区| 欧美日韩一区三区| 人妻少妇精品无码专区久久|