欧美三区四区_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教程
中文字幕成人| 无码人妻少妇色欲av一区二区| 午夜影院在线看| 日韩理论电影中文字幕| 久久久久久免费毛片精品| 亚洲午夜未删减在线观看| 日本高清久久一区二区三区| 欧美人妻一区二区三区| 日韩三级成人| 成人午夜电影小说| 亚洲性线免费观看视频成熟| 正在播放精油久久| 国产在线观看你懂的| 亚洲精品推荐| 亚洲欧美日韩一区| 97精品在线观看| 另类小说第一页| 国产强被迫伦姧在线观看无码| 亚洲高清在线| 欧洲一区二区三区在线| 亚洲综合成人婷婷小说| 中文字幕一区二区久久人妻网站| 国精品产品一区| 成人免费av在线| 正在播放亚洲1区| 成人免费看片'免费看| 色av性av丰满av| 欧美成人日韩| 欧美亚洲尤物久久| 国产久一道中文一区| 日本少妇xxxxx| 国产一区福利| 亚洲视频在线观看三级| 欧美一区二区.| 久久精品一二三四| 欧美日韩免费电影| 久久久久久久久久久久久夜| 色综合久综合久久综合久鬼88| 欧美一级片中文字幕| 国产高清在线观看视频| 免费人成黄页网站在线一区二区| 亚洲成人av在线| 在线观看成人av| 成年人av网站| 一区二区三区四区五区精品视频 | 欧美日韩日日摸| 好看的日韩精品视频在线| 手机在线中文字幕| 色135综合网| 在线观看不卡一区| 欧美日韩一区二区三区免费| 国产真人真事毛片| 欧美日本久久| 91精品国产综合久久久久| 天堂资源在线亚洲资源| 91国产丝袜播放在线| 欧美日韩国产色综合一二三四| 欧美日韩国产影片| 欧洲av一区| 国产精品久久久久久人| 国产一区二区三区久久久久久久久| 欧美mv日韩mv国产网站app| 二级片在线观看| 91theporn国产在线观看| 欧美aaaaa成人免费观看视频| 亚洲精品资源美女情侣酒店| 久久精品视频16| 性xxxx视频| 久久天天做天天爱综合色| 2019中文字幕在线| 欧美深性狂猛ⅹxxx深喉 | 日韩暖暖在线视频| 国产全是老熟女太爽了| 国产探花在线精品| 欧美在线播放高清精品| 色一情一乱一伦一区二区三区丨| 久草视频在线免费| 美女视频网站久久| 色黄久久久久久| 亚洲五月激情网| 粉嫩久久久久久久极品| 亚洲国产wwwccc36天堂| 国产乱码精品一区二区三区卡 | 国产在线观看精品| 日韩三级在线观看视频| 国产一区亚洲| 精品偷拍各种wc美女嘘嘘| 国产主播在线看| 日韩在线免费| 亚洲天堂av一区| 国产精品乱码一区二区三区| 成年人午夜视频| 久久一日本道色综合久久| 中文字幕亚洲天堂| 亚洲av无码成人精品区| 西野翔中文久久精品字幕| 色狠狠桃花综合| 艳母动漫在线观看| 最新日韩精品| 亚洲视频在线观看一区| 国产日韩久久| 又污又黄的网站| 国产成人一区在线| 国产91精品久久久久| 免费黄色在线网址| 欧美日本中文| 亚洲午夜精品久久久久久久久久久久| 女人高潮一级片| 国产精品毛片久久久| 色婷婷精品久久二区二区蜜臂av | 久久综合给合久久狠狠狠97色69| 国产精品色悠悠| 国产在线拍揄自揄拍无码视频| 久热国产精品| 欧美精品18videos性欧| 国产伦理片在线观看| 午夜精品剧场| 色哟哟入口国产精品| 日韩成人av一区二区| 91精品国产成人观看| 亚洲免费av网址| 国产成人精品综合久久久久99 | 亚洲天堂视频在线播放| 丁香婷婷综合网| 国产免费观看久久黄| 免费日韩一级片| 国产精品一区二区三区四区 | 中文字幕在线看高清电影| 亚洲精品一区二区在线看| 亚洲欧美自拍一区| 亚洲精品久久一区二区三区777| 97久久夜色精品国产| 亚洲午夜未删减在线观看| 黄色在线免费播放| 在线精品国产| 亚洲美女在线视频| 国产激情视频网站| 亚洲无线一线二线三线区别av| 久久精品2019中文字幕| 久久久久无码精品国产sm果冻| 亚洲三级网站| 久久99久久99精品免观看粉嫩| a一级免费视频| 喷水一区二区三区| 国产精品露脸自拍| 欧美成人一区二区三区四区| 91在线看国产| 国产女主播一区二区| 精品人妻一区二区三区三区四区| 中文字幕在线不卡视频| 亚洲欧洲一区二区| ww久久综合久中文字幕| 在线区一区二视频| 日韩av在线综合| 亚洲第一二三区| 日韩国产精品一区| 国产人成视频在线观看| 亚洲电影成人| 性视频1819p久久| 日本五十熟hd丰满| 9i在线看片成人免费| 精品视频一区二区三区四区| 色综合久久久久久| 狠狠久久五月精品中文字幕| 无码播放一区二区三区| 亚洲另类春色校园小说| 亚洲免费电影在线观看| 亚洲精品乱码久久久久久久久久久久| 日韩综合小视频| 国产精品久久久久久久久| 国产精品suv一区| 国产日韩在线不卡| 亚洲v国产v| 国产色99精品9i| 欧美大片免费久久精品三p| 9.1在线观看免费| 国产精品入口| 国产精品吊钟奶在线| 亚洲一区二区激情| 一区二区三区四区中文字幕| 成年人网站国产| 国产精品一区二区99| 日韩在线免费视频| 欧美日韩大片在线观看| av激情综合网| 色吧亚洲视频| 日韩免费精品| 亚洲精品自在久久| 天堂av网手机版| 国产成人精品三级麻豆| 狠狠爱一区二区三区| 日韩精选视频| 日韩精品一区二区三区视频| 欧美深性狂猛ⅹxxx深喉| 日韩**一区毛片| 91在线看网站| 色豆豆成人网| 日韩欧美亚洲国产另类| www.久久国产| 国产中文一区二区三区| 激情视频一区二区| 国产精品亲子伦av一区二区三区| 日韩色视频在线观看| 久久国产精品影院| 国产一区二区不卡在线| 久久99国产精品99久久| 自拍偷拍亚洲图片| 日韩电影中文字幕在线观看| 人人干在线观看| 26uuu国产在线精品一区二区| 亚洲制服中文| 神马香蕉久久| 久久偷看各类女兵18女厕嘘嘘| 亚洲免费在线观看av| 亚洲精品一二三区| 国产综合免费视频| 亚洲私人影院| 国产在线视频2019最新视频| 成人欧美大片| 日韩欧美一级二级三级久久久| 国产精品国产三级国产专业不| 不卡高清视频专区| 午夜啪啪免费视频| 一区二区小说| 国内精品久久久久影院 日本资源| 亚洲一级片免费看| 日本国产一区二区| 无码精品一区二区三区在线播放| 国产一区中文字幕| 亚洲成人第一| 久久动漫网址| 精品综合久久久久久97| 中文字幕人妻一区二区三区视频| 夜夜亚洲天天久久| 红桃视频 国产| 美女网站在线免费欧美精品| 欧美一区二区高清在线观看| 牛牛精品成人免费视频| 欧美精品18videos性欧| 国产精品玖玖玖| 欧美美女bb生活片| аⅴ天堂中文在线网| 久久美女高清视频| 丰满爆乳一区二区三区| 一区二区91| 久久精品国产美女| 一区二区小说| 日产日韩在线亚洲欧美| 五月婷婷激情在线| 亚洲精品成人久久久| 日本在线小视频| 午夜精品久久一牛影视| 亚洲黄色小说在线观看| 国产成人av自拍| 日本a级片在线观看| 欧美黄色免费| 成人蜜桃视频| 菁菁伊人国产精品| 3344国产精品免费看| 午夜视频免费看| 日韩精品视频免费在线观看| 亚洲第一在线播放| 日韩欧美精品在线观看| 香蕉视频久久久| 国产精品毛片无遮挡高清| 成人亚洲精品777777大片| 蜜臀91精品一区二区三区| 亚洲免费精品视频| 天天综合精品| av一本久道久久波多野结衣| 成人精品毛片| 奇米一区二区三区四区久久| 日韩欧美看国产| 在线电影中文日韩| 亚洲熟妇无码久久精品| 欧美一区二区三区思思人| 免费人成在线观看| 欧美日韩在线另类| 懂色av粉嫩av浪潮av| 日韩美女视频一区| 中文字幕一区二区三区人妻在线视频| av在线这里只有精品| avav在线看| 久久丁香综合五月国产三级网站 | 国产精品无码粉嫩小泬| 69p69国产精品| 国产一级片网址| 在线视频欧美精品| 国产视频精品免费| 午夜精品久久一牛影视| 乐播av一区二区三区| 亚洲日穴在线视频| 日韩无码精品一区二区| 欧美极品xxx| 国产sm在线观看| 国产日韩欧美制服另类| www.污污视频| 91美女福利视频| 亚洲娇小娇小娇小| av在线一区二区| 黄色三级视频在线| 成人美女视频在线观看18| 男人的天堂日韩| 国产成a人亚洲精品| 欧美黄网站在线观看| 精品一区二区在线播放| 日本午夜激情视频| 麻豆精品在线看| 激情深爱综合网| 国产一区福利在线| 男人的天堂99| 成人动漫av在线| 97超碰人人爽| 久久精品一区二区三区四区| xxxx国产视频| 国产精品视频第一区| 中文字幕在线视频播放| 中文字幕制服丝袜成人av| 少妇大叫太粗太大爽一区二区| 亚洲精品中文字幕在线观看| 91成年人网站| 婷婷开心激情综合| 欧美色图一区二区| 在线电影一区二区三区| 亚洲成熟少妇视频在线观看| 亚洲国产精品yw在线观看| 国产一区二区三区在线观看| 亚洲色图激情小说| 特级丰满少妇一级aaaa爱毛片| 久久久91精品国产| 秋霞国产精品| 亲子乱一区二区三区电影 | 一二三区精品福利视频| 亚洲女同二女同志奶水| 在线观看国产91| 国产原创视频在线| 亚洲精品国产品国语在线| 亚洲第一第二区| 久久99久久亚洲国产| 国产精品日本一区二区不卡视频 | 久久九九影视网| 中文成人无字幕乱码精品区| 亚洲资源在线观看| 国产精品久久久久久久精| 91.成人天堂一区| 国产一区二区三区黄片| 久久精品亚洲一区| 国产精品一区二区三区www| 国产精品一二三在线| 四季av在线一区二区三区| 任我爽在线视频精品一| 视频一区国产视频| 波多野结衣家庭教师视频| 91麻豆国产自产在线观看| 欧美熟妇精品一区二区蜜桃视频| 一区二区免费看| 久久免费精彩视频| 欧美精品一区二区在线播放| 六月婷婷综合网| 97视频在线观看免费| 亚洲制服欧美另类| 久久久99爱| 久久精品卡一| 亚洲人成无码www久久久| 国产欧美日韩在线看| 亚洲欧美另类日本| 5566中文字幕一区二区电影| 国产超碰人人模人人爽人人添| 久久97精品久久久久久久不卡| 成人性生交大片免费看96| 国语精品免费视频| 性欧美videos另类喷潮| 成年人小视频网站| 国产精品久久久久久久久免费相片 | 亚洲综合网在线观看| 欧美日韩亚洲高清一区二区| 一卡二卡在线观看| 欧美黑人极品猛少妇色xxxxx| 日韩免费电影在线观看| 日韩欧美亚洲日产国| 韩国三级在线一区| 黄色在线免费播放| 欧洲一区二区av| 国产精品欧美激情在线| 久久久久久久一区二区| 欧美人与拘性视交免费看| 亚洲一区二区三区精品视频| 国产91丝袜在线观看| 亚洲AV无码国产精品| 欧美日本一道本| 囯产精品一品二区三区| 日韩美女免费观看| 综合激情一区| 美女av免费在线观看| 中文字幕亚洲成人| 欧美日韩中文视频| 亚洲午夜精品视频| 岛国成人av| 图片区小说区区亚洲五月| 国产成人在线色|