2009-11-28 69 views

回答

0

控制器應該提供所有必要的數據以供查看。這使得視圖更具可測性。如果您只使用視圖模型內部視圖,您可以輕鬆地編寫測試:

  1. 創建視圖模型。
  2. 創建視圖對象。
  3. 傳遞模型以查看。
  4. 渲染視圖。
  5. 檢查結果是否正確。

如果您在視圖內部使用了HttpContext.Current,那麼您必須在測試中首先對其進行設置,這可能並不容易,並且會增加額外的依賴關係。

0

它放鬆您的控制器和應用程序中的其他類之間的耦合。通過使用更多的依賴注入模式,可以提高控制器的可測試性。這是因爲在你的測試中,你不需要模擬像HttpContext這樣的概念,但可以簡單地傳入用戶對象。

+0

Wait ...在視圖中使用HttpContext具有零依賴性,因爲視圖在瀏覽器外大部分是無法測試的。僅在控制器內使用HTTPContext ADDS耦合並降低可測試性。 – jfar 2009-11-28 22:27:33

+0

聽起來像mawaldne想要訪問控制器中的HttpContext,這正是我所說的。控制器應避免直接使用HttpContext/HttpRequest以提高可測試性。 – mckamey 2009-11-28 22:51:19

1

如果您使用Selenium自動化您的視圖測試或使用其他工具來檢查您的HTML輸出,這隻會是實用的。

如果在控制器中使用HTTPContext的情況可能是一個非常糟糕的主意,因爲這隻會增加控制器操作和HTTPContext之間的耦合。

爲了獲得最大的可測試性,您可能需要設置一個控制器工廠,當MVC調用它時,可以將用戶位注入到控制器中。這樣,您的操作方法仍然與HTTPContext分離,並且您可以獲得可測試性。

如果你不使用自動化視圖測試工具,那麼你調用你的HttpContext.User信息並不重要,除非你在視圖中做了很多邏輯。例如,如果(HttpContext.User.IsAuthenticated)什麼的。如果是這種情況,您可以將它粘貼到控件中並使用RenderPartial或將邏輯位烘焙到您的視圖模型中。

對於MVC,推薦的最佳做法是讓您的視圖儘可能啞。然而,我建議不要讓所有關於MVC和模式的教條主義,什麼不是。因爲MVC沒有在SubController功能中烘焙,所以有很多地方打破了MVC模式不僅鼓勵,而且不可能不以其他方式打破。 (請參閱MVC 2 RenderAction,RenderPartial,帶有控件的MasterPages)