簡體   English   中英

ASP.NET MVC 4單元測試(我應該測試什么)

[英]ASP.NET MVC 4 Unit testing (what i should test)

我有疑問應該測試什么,控制器或模型? 例如,我要測試用戶注冊。 注冊包括一些用於將其他數據插入表並通過輸入數據設置用戶狀態的操作。

我使用Internet模板創建新應用程序,具有UserProfile類,RegisterModel類等。在控制器代碼注冊中,請使用WebSecurity類。

WebSecurity.CreateUserAndAccount(this.Email, this.Password);
WebSecurity.Login(this.Email, this.Password);
Roles.AddUsersToRole(new[] { this.Email }, FSUserRoles.NotValided.ToString());

所有編寫創建Repository類的指南,但是如何將其應用於上面的代碼? 如果我將此代碼放到存儲庫中,那么我應該測試控制器,並且控制器將會很胖。 模型就像屬性架構,存儲庫方法將封裝CRUD動作的EF方法。

我有疑問應該測試什么,控制器或模型?

答案是兩者兼而有之 包含任何邏輯的每段代碼(不僅是業務邏輯,而且還包括進入控制器的邏輯,例如,如果條件為真,則重定向到link1,否則為link2)最好進行單元測試。

測試多少是我們“開發人員”必須解決的真正問題。

例如,我要測試用戶注冊。 注冊包括一些用於將其他數據插入表並通過輸入數據設置用戶狀態的操作。

在討論單元測試時,您將為一個單元(即一個類)編寫測試。 在上面的示例中,您將測試控制器方法Register()的情況,以了解它根據不同的條件返回不同的輸出。 例如,如果用戶已經存在,您將返回失敗,並顯示消息“用戶名已存在”。

在控制器代碼注冊中,使用WebSecurity類。

在您的控制器中,您可能想在WebSecurity上使用包裝器在單元測試期間對其進行模擬。 在編寫單元測試時,您將設置IWebSecurityWrapper方法以返回不同的輸出以測試控制器動作的行為。

所有編寫創建Repository類的指南,但是如何將其應用於上面的代碼? 如果我將此代碼放到存儲庫中,那么我應該測試控制器,並且控制器將會很胖。 模型就像屬性架構,存儲庫方法將封裝CRUD動作的EF方法。

存儲庫模式有助於將表示層與數據訪問層隔離。 同樣,整個想法是能夠模擬單元測試下使用的代碼。 如果您的控制器或模型類依賴於IDbContext類的接口,並在運行時發現依賴項,則可以在單元測試期間輕松地將其替換為模擬或存根,從而輕松實現。 這樣,您就可以在單元測試執行期間更好地控制數據的來源(在內存中,即集合)和數據的去向。

由於羅伯特·哈維(Robert Harvey)在上面的評論中正確指出的原因,知道要測試多少的任務非常重要。

希望這可以澄清疑問。

關於存儲庫,我假設您正在談論數據存儲庫模式? 以下URL為該概念的新知識提供了很好的示例存儲庫實現: http : //www.codeproject.com/Articles/526874/Repositorypluspattern-cplusdoneplusright

在很多時候,當我在團隊之外編寫代碼時,我實際上會編寫自己的DAL並傾向於采用數據優先的方法,我發現依靠數據庫引擎而不是應用程序層將為我提供更好的服務。但是,最終性能的提高會不斷增加代碼的維護工作量,更不用說需要對所使用的基礎數據庫技術有一定程度的了解。

測試可能是一個非常復雜的過程,具體取決於您要構建的內容以及最終用戶是誰。...您的問題的答案可能很廣泛,但是,我將堅持我的一般做法對這個:

單元測試MVC應用程序(以及開發的各個階段):

初始構建/調試技術測試:

  1. 使用單元測試框架來測試數據層方法(數據庫->模型),或者甚至可以引用DLL並在簡單的WinForms測試應用程序中調用方法。

  2. 測試控制器操作-可以像在瀏覽器中打開/ home / index一樣簡單,也可以像創建另一個TestHarness App來使用WebClient類進行調用一樣復雜(例如,如果使用REST / WEB-API)。

  3. 測試Web服務調用-如果您正在執行WCF或SOAP類型的Web服務,則可以使用SOAP-Ui ;對於其他實現,可以使用自定義TestHarnesses。

控制器/數據訪問層工作,進入功能:

  1. 測試視圖-在瀏覽器中打開頁面,測試布局/ CSS並確保其按您的意願顯示,瀏覽器中的F12(調試)和檢查元素選項是此處的重要工具。

即將發布:

  1. 測試完全交互性-實際上是按設計使用的應用程序使用頁面。 在多個瀏覽器中進行測試,以確保沒有JavaScript / CSS渲染怪異。

希望對您有所幫助!

您的問題有點難以理解,但是基本上這完全取決於您的控制器和業務邏輯。 如果您的控制器“薄”,那么您仍然可以測試任何路由規則。 例如,是否應根據特定情況重定向用戶。 大多數測試將針對業務邏輯所在的位置

無論哪種情況,都需要一個存儲庫,您需要一個存儲庫,以便可以使用依賴注入實例化Mock存儲庫以進行測試。 這樣就可以避免在測試過程中實際上沒有在數據庫中保存任何數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM