Navigation庫使得ASP.NET Web窗體更易測試
英文原文:Navigation Makes ASP.NET WebForms More Testable
Navigation 是一個庫,通過將 CRUD[1]邏輯從后置代碼文件中分離出來,從而使得 ASP.NET Web 窗體更易測試。Graham Mendick 的文章“用 Navigation 進行單元測試”介紹了一些相關功能、以及如何編寫單元測試。
這個庫是做什么的?它使得
- 控件將被綁定到位于單獨類中的控制器方法上。
- 導航綁定(Navigational binding)
所有位于 aspx 頁面的標記。例如,用于將 FormView 控件綁定到其控制器方法(controller method)的標記將如下所示——
<asp:FormView runat="server" DataSource DefaultMode="Edit">
<EditItemTemplate>
</EditItemTemplate>
</asp:FormView>
<asp:ObjectDataSource runat="server" SelectMethod="GetQuestion" UpdateMethod="UpdateQuestion" TypeName="Survey.SurveyController" DataObjectTypeName="Survey.Question" />
其中GetQuestion
和UpdateQuestion
是在名為SurveyController
的外部類中實現的控制器方法——它們不能直接訪問控件,而是通過 Navigation 庫將數據傳遞給它們。Survey.Question
引用一個在本示例中使用的視圖模型(ViewModel)來傳輸數據。
為何說它可以簡化單元測試?因為現在,業務邏輯位于單獨的、無任何 web 特定行為的 POCO[2]類中。所以說它使得測試變得更容易。更多詳細信息請參閱此文。
盡管我們已在 InfoQ 上提到過,WebForms 4.5 獲得 model binders(模型聯編程序)開箱即用(out-of-the-box)——然而這個庫允許將控制器方法放置到單獨的類中,從而取代后置代碼文件,這對于可測試性和可重用性似乎更好。如果您有興趣,可以下載 Navigation NerdDinner 演練代碼。
譯注
[1] CRUD,即 Create, Read, Update, Delete 的首字母縮寫,指數據庫操作中的創建、讀取、更新、刪除。
[2] POCO,即 Plain Old CLR Object 的縮寫,簡單傳統 CLR(公共語言運行庫)對象,更多詳細信息請參閱維基百科。
來自: InfoQ