一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

解析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教程
日日噜噜夜夜狠狠| 李丽珍裸体午夜理伦片| 国产精品三级美女白浆呻吟| 日韩欧美国产视频| 久久一区二区三区超碰国产精品| 蜜桃色一区二区三区| 国产一区精品视频| 亚洲人午夜精品免费| 欧美激情一区二区三区| 在线免费观看高清视频| 怡红院亚洲色图| 51精品国产人成在线观看 | 国产精品v欧美精品v日韩精品 | 精品视频一区三区九区| 精品系列免费在线观看| 日本黄区免费视频观看| 国产精品videossex国产高清| 555www成人网| 欧美一区二区成人| 久久色在线观看| 97超视频在线观看| 一区二区不卡免费视频| 91xxx视频| 国产成人精品在线观看| 精品欧美久久久| 中文一区二区完整视频在线观看| 成 人片 黄 色 大 片| 久久久久久久毛片| 国产手机免费视频| 91免费欧美精品| 国产一区二区成人| 福利一区视频在线观看| 国产成a人无v码亚洲福利| 男人天堂2024| 中文字幕 亚洲一区| 男女裸体影院高潮| 91精品视频在线播放| 亚洲欧洲中文天堂| 午夜欧美一区二区三区在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 男人天堂av在线播放| 日韩精品视频一区二区| 成人免费在线视频播放| 成人午夜高潮视频| 久久久av一区| 91精品视频网| 亚洲蜜臀av乱码久久精品蜜桃| 天堂av在线一区| 丁香六月婷婷综合| 亚洲av片不卡无码久久| 777精品久无码人妻蜜桃| 国产精品国产亚洲精品看不卡15| 精品综合久久久久久97| 91精品国产色综合久久ai换脸| 亚洲国产成人自拍| 蜜臀久久99精品久久久久久9| 久热这里只有精品6| 亚洲一区二区三区三州| 国产精品久久久影院| 亚洲一区精品电影| 欧美激情精品久久久久久免费印度| 91麻豆精品国产91久久久资源速度 | 精品国产乱码久久久久| 国外成人在线播放| 日韩国产精品亚洲а∨天堂免| 亚洲精品老司机| 成人国产电影网| 人人妻人人玩人人澡人人爽| xxxx.国产| 一级黄色片网址| 亚洲色图偷拍视频| 久青草视频在线播放| 狠狠色噜噜狠狠色综合久| 2019精品视频| 中文字幕9999| 欧美哺乳videos| 色偷偷一区二区三区| 欧美国产一区视频在线观看| 国产老肥熟一区二区三区| 亚洲h视频在线观看| www.国产com| 午夜激情福利电影| 女同性恋一区二区三区| 黄色在线视频网| 天堂а√在线中文在线| 裸模一区二区三区免费| 国产精品爽黄69| 欧美大成色www永久网站婷| 日韩av在线免费播放| 欧美日韩在线三区| 黄色一区二区在线| 中文字幕一区二区三区色视频| 国产**成人网毛片九色 | 成人av一区二区三区在线观看| 亚洲 欧美 视频| 貂蝉被到爽流白浆在线观看| 人妻体内射精一区二区三区| www.99r| 免费在线观看的av网站| 日韩一区二区高清视频| 日韩av高清在线播放| 92看片淫黄大片欧美看国产片| 97超级碰在线看视频免费在线看| 久久精品国产成人精品| 亚洲一区二区久久| 日韩国产精品一区| 亚洲国产天堂久久国产91| 4438x亚洲最大成人网| 日本精品一级二级| 大桥未久av一区二区三区| 亚洲人一二三区| 中文字幕 久热精品 视频在线| 97精品视频在线观看自产线路二| 国产精品一二三区| 精品一区二区三区欧美| 日韩av在线播放中文字幕| 亚洲欧美中文在线视频| 日韩欧美视频一区| 欧美一区二区三区在线视频| 欧美三级三级三级| 在线视频你懂得一区二区三区| 黄色91在线观看| 精品欧美激情精品一区| 精品福利在线视频| 精品久久久久久中文字幕大豆网| 亚洲国产精品久久艾草纯爱| 夜夜嗨av一区二区三区四季av | 亚洲精品中文在线| 自拍偷拍国产亚洲| 亚洲精品中文在线| 亚洲成a人v欧美综合天堂下载| 亚洲一线二线三线久久久| 一区二区三区日本| 亚洲va欧美va人人爽午夜| 午夜精品在线看| 欧美日韩中文字幕综合视频| 大桥未久av一区二区三区| 日本韩国精品一区二区在线观看| 一本到三区不卡视频| 欧美性生活影院| 在线播放中文一区| 日韩欧美卡一卡二| 日韩精品有码在线观看| 国产一区二区三区高清在线观看| 中文日韩在线观看| 免费97视频在线精品国自产拍| 欧美福利视频在线| 欧美性资源免费| 国产精品视频免费在线| 99re在线国产| 欧美日韩精品中文字幕一区二区| 婷婷精品国产一区二区三区日韩| 欧美性xxxx69| 国内外成人激情免费视频| 国产成人永久免费视频| 三级4级全黄60分钟| 亚洲黄色av片| 老熟妇精品一区二区三区| 亚洲 小说 欧美 激情 另类| 黄色录像一级片| 男人的天堂一区二区| 中文字幕第一页在线播放| 不卡视频在线播放| 老司机午夜精品| 9色porny自拍视频一区二区| 国产精品美女久久福利网站| 亚洲午夜久久久久| 欧美日韩免费观看一区二区三区 | 亚洲一二三av| 亚洲黄色免费在线观看| 日韩国产第一页| 69亚洲精品久久久蜜桃小说| 国产高清在线免费| 久久精品国产精品亚洲精品| 99久久久国产精品| 亚洲女同一区二区| 欧美视频一区二区三区| 日韩精品在线观| 欧美激情一级二级| 成人黄在线观看| 日韩色妇久久av| 日日摸日日碰夜夜爽无码| 日本网站在线看| 国产99在线 | 亚洲| 欧美一二三区视频| 亚洲免费成人在线| 狠狠色狠狠色综合| 国产精品无遮挡| 色婷婷一区二区三区四区| 亚洲成色777777女色窝| 欧美美女15p| 91免费版网站入口| 中文字幕精品—区二区日日骚| 久久久久狠狠高潮亚洲精品| 69xxx免费视频| 日韩女优一区二区| 国产精品玖玖玖| 国产在线精品一区二区不卡了| 欧美国产禁国产网站cc| 日本高清不卡在线观看| 日韩精品免费在线视频| 91精品国产91久久久久久久久| 国产精品国产三级国产专区53 | 国产大片aaa| 午夜老司机福利| 成人爽a毛片一区二区免费| 亚洲夂夂婷婷色拍ww47| 亚洲成人久久网| 91成人精品网站| 麻豆91蜜桃| 2025韩国理伦片在线观看| 黄色裸体一级片| 国产孕妇孕交大片孕| 国产精品一区免费视频| 亚洲动漫第一页| 精品香蕉一区二区三区| 国产成人黄色av| 一区二区三区在线视频111| 亚洲黄色av片| 日操夜操天天操| 日韩中文字幕一区二区三区| 国产精品欧美一区二区三区| 91精品国产综合久久久久久久久久 | 日韩精品影音先锋| 国模叶桐国产精品一区| 欧美亚洲国产免费| 色婷婷成人在线| 久久久久无码国产精品| 水蜜桃久久夜色精品一区的特点| 国产精品第一页第二页第三页| 欧美一区二区三区免费在线看| 久久久久久国产免费| 欧美1o一11sex性hdhd| 亚洲免费一级视频| 久久久久免费看| 日本成人在线一区| 一区二区三区精品在线| 亚洲欧美精品中文字幕在线| 成人av色在线观看| 精品视频免费在线播放| 日本裸体美女视频| 日本黄色免费视频| 亚洲视频一二三| 亚洲欧美一区二区激情| 99久热re在线精品996热视频| aⅴ在线免费观看| 欧美黄片一区二区三区| 免费在线观看成人| 五月天丁香久久| 超在线视频97| 亚洲精品一品区二品区三品区| 日本50路肥熟bbw| 91福利免费视频| 亚洲国产高清不卡| 日韩国产中文字幕| 国产精品大全| 精品久久久99| 国产无遮挡又黄又爽又色视频| 白白色 亚洲乱淫| 欧美一区二区视频观看视频| 国产精品丝袜久久久久久不卡| 国产午夜福利在线播放| 免费看一级一片| 国产精品一级片在线观看| 欧美日韩一区在线| 国产精品福利久久久| 欧美变态另类刺激| 黄色片视频网站| 99精品热视频| 亚洲国产成人爱av在线播放| 999精品视频一区二区三区| 一级做a免费视频| 最新中文字幕免费| 国产精品久久久久影院| 中文字幕视频在线免费欧美日韩综合在线看 | 国产精品视频白浆免费视频| 国产精品拍拍拍| 中文精品久久久久人妻不卡| 亚洲国产精品精华液2区45| 日韩精品在线免费观看| 欧美日韩精品久久久免费观看| 国产吞精囗交久久久| 久久一区二区三区四区五区| 在线亚洲一区二区| 国产精品视频免费在线| 天堂中文av在线| 国产日韩免费视频| 亚洲高清三级视频| 69久久夜色精品国产69乱青草| 亚洲熟妇无码一区二区三区| 成人免费视频毛片| 国产日韩欧美麻豆| 日韩最新在线视频| av动漫在线免费观看| 动漫精品一区一码二码三码四码| av网站免费线看精品| 精品一区二区三区三区| 日韩精品久久一区二区三区| 成年人视频软件| 国产福利一区二区| 日韩精品欧美激情| 五月天丁香综合久久国产| 国产极品美女在线| 99久免费精品视频在线观看| 亚洲欧美国产精品专区久久| 亚洲三级一区| 免费一级特黄特色大片| 国产精品素人一区二区| 欧美国产亚洲精品久久久8v| 男人亚洲天堂网| 97在线播放免费观看| 午夜成人在线视频| 国产精品自产拍在线观看中文| 人妻精油按摩bd高清中文字幕| 久久精品国产清高在天天线| 69久久99精品久久久久婷婷| 久久精品人成| 久久中文免费视频| 国产视频一区二区在线| 欧美精品www| 天堂av8在线| 日本不卡一区二区三区高清视频| 日韩欧美一级特黄在线播放| 日本一区精品| 国产大片中文字幕| 亚洲欧美区自拍先锋| 国产精品 欧美在线| 亚洲美女精品视频| 久久99蜜桃精品| 国产亚洲精品久久| 久久视频这里有精品| 国产福利小视频| 制服丝袜一区二区三区| 日韩av一区二区三区美女毛片| 久久精品国产亚洲AV无码麻豆| 亚洲精品欧美激情| 成人高h视频在线| 色噜噜噜噜噜噜| 国产午夜精品美女毛片视频| 久久乐国产精品| 亚洲国产综合av| 国产精品一区免费视频| 久久精品国产亚洲精品| 国产裸体舞一区二区三区| 天堂网在线播放| 亚洲国产精品va在线看黑人| 欧美亚洲色图视频| 精品国产乱码一区二区三| 91精品国产一区二区三区 | 7777精品伊人久久久大香线蕉 | 亚洲v日本v欧美v久久精品| 91久久国产综合久久蜜月精品 | 欧美极品美女视频| 欧美在线视频一二三| a天堂视频在线观看| 成人综合婷婷国产精品久久 | www.美色吧.com| 成人丝袜视频网| 97人人模人人爽人人喊中文字 | 免费一级特黄3大片视频| 国产日产欧美精品一区二区三区| 欧美在线视频免费播放| 丝袜美腿中文字幕| 国产日韩欧美激情| 国产欧美日韩最新| 男女性高潮免费网站| 伊人夜夜躁av伊人久久| 风间由美久久久| 好吊操这里只有精品| 色婷婷综合久久久久中文一区二区| 欧美一区二区三区四区五区六区 | 五月天国产精品| 日本一区二区三区精品视频| 亚洲天堂2021av| 日韩午夜av电影| 欧美一级欧美一级| 熟妇人妻系列aⅴ无码专区友真希| 精品亚洲一区二区三区四区五区| 亚洲中文字幕无码中文字| 蜜桃一区二区三区在线观看| 久久亚洲国产精品成人av秋霞| 91精产国品一二三| 久久久亚洲精品一区二区三区| 国产精品99一区| 动漫性做爰视频| 欧美性xxxx在线播放| 一本一道久久久a久久久精品91| 国产精品国产三级国产aⅴ| 亚洲电影天堂av | 久久久久久亚洲精品杨幂换脸| 在线电影中文日韩| 波多野结衣电影免费观看| 久久久国产精品麻豆| 成人在线激情视频| 国产精品成人久久| 欧美精品色综合| 国产淫片免费看| 国产精品一区二区你懂的| 国产91精品久久久久久久| 日本黄色片免费观看| 在线中文字幕一区二区| 300部国产真实乱| 美女久久久精品| 亚洲91精品在线| 人妻视频一区二区| 欧美日韩一区免费| 久操手机在线视频| 韩国av一区二区三区四区| 欧洲美女免费图片一区| 欧美日韩在线视频免费|