2010-02-22 70 views
19

我怎樣才能測試一個ASP MVC應用程序的視圖?單元測試asp mvc視圖

我已經嘗試了MVC的contrib測試幫手......

_controller.Index().AssertViewRendered(); 

但這並不實際測試的看法。

例如,我可以愉快地在視圖中插入一些僞代碼,並獲得死亡的可怕黃色屏幕,沒有我的單元測試知道它。

有沒有建立這樣做的方法?我需要模擬視圖引擎嗎? mvccontrib迎合這個嗎?

我原以爲這是一個非常普遍的要求,但我找不到太多的東西!

感謝

編輯 我是真的什麼之後,編譯時間檢查,以確保模型的變化不會影響視圖。

這個問題包含了啓用編譯時間視圖編譯的說明,這對我來說已經足夠了。 Compile Views in ASP.NET MVC

+0

我剛剛發現這個鏈接http://devermind.com/aspnet/aspnet-mvc-tip-turn-on-compile-time-view-checking/,我會很高興,我不是很看測試任何邏輯,只是爲了確保任何模型更改不會影響我的觀點。不幸的是,它在作爲遊戲網站的工作中被阻止。所以我得等到我回家看看吧! – 2010-02-22 22:35:56

回答

13

有3種選擇:

  1. 你想單元測試在視圖中的代碼。在這種情況下,您必須將代碼移動到控制器,因爲擁有此代碼不是視圖的責任。
  2. 您希望確保視圖實際顯示在瀏覽器中。使用瀏覽器UI測試工具,如waitin或selenium。這不會創建視圖的單獨測試,而是創建應用程序的大部分內容。這聽起來像是一種優勢,但是在一個獨立的視圖測試中是否有任何價值?
  3. 你想測試你的視圖中的代碼是可編譯的代碼。然後編譯代碼。這可以在單元測試中完成,方法是手動調用view.compile或在構建過程中打開視圖編譯器。
+2

你能否詳述點3? – 2010-02-22 22:39:23

+1

點贊3 :) – 2010-02-22 22:58:52

+0

我同意這一點。如果你正在測試一個視圖是否被渲染,你就進入了不受你影響的測試代碼領域。如果你有任何邏輯,無論多麼微不足道,它都屬於ViewModel。現在你應該能夠輕鬆地進行測試。 – 2013-05-01 20:41:32

2

您應該看看MS Test套件中的Web測試工具或其他Web測試工具之一,如Selenium以測試視圖,如果您需要對這些視圖進行自動測試。我認爲你會發現比修改單元測試框架更容易。

完全披露:我仍然手工測試我的UI。我沒有找到足夠的好處來彌補學習,設置和維護Web測試的成本。

0

我的建議是不打擾廣泛測試您的意見。這很難,如果你正在做的事情,反正他們不會有太多的邏輯。

也就是說,WatiN是自動瀏覽器測試的好工具 - 不完全是你想要的,但它運行良好。

2

單元測試通常不會測試用戶界面,因爲它太簡單了太脆要這樣做。

儘管你可能會爭辯說minum測試會是當我們試圖渲染它時,View並沒有崩潰,但這也將是我們實際上可以爲View(ASP)編寫的唯一單元測試。 NET MVC,WPF,Windows Forms等 - 它並不重要)。

您(或您的客戶)想要測試的下一件事是視圖呈現正確,並且無法通過自動化測試可靠地進行此操作。這一切歸結到的是,視覺檢測更好地測試視圖,因爲投資回報在這上面,比試圖開發和維護自動UI測試更好。

0

在ASP.NET MVC頁面中測試視圖相當簡單。

I walk you through step-by-step in a YouTube video。下面是所需的步驟概述:

  1. 您需要在控制器創建單元測試。這允許輕鬆調用渲染結果。例如:

    public ActionResult TestScenario() 
    { 
        // setup some models 
        return View("Page", model); 
    } 
    
  2. 你的單元測試需要調用ControllerAction,並驗證結果。 在ApprovalTests這將是:

    MvcApprovals.VerifyMvcPage(new MyController().TestScenario); 
    

    這是ApprovalTests都是相當直截了當(www.approvaltests.com或的NuGet)。

+1

ASP.NET MVC測試的文檔在哪裏? – 2012-10-11 01:43:18

3

有可能使用Visual Studio測試工具經由單元測試,以測試你的意見,但只有值,由控制器(在ViewBag例如值:ViewBag.message = "My message.")創建或所呈現的視圖的名稱:

[TestMethod] 
public void MyActionTest() 
{ 
    // Arrange 
    var lController = new HomeController(); 

    // Act 
    var lResult = lController.MyAction() as ViewResult; 

    // Assert 
    Assert.IsTrue(lResult.ViewBag.message == "My message.", "Wrong Message in Viewbag."); 
    Assert.IsTrue(lResult.ViewName == "MyView", "Incorrect view."); 
} 

如果你想自動測試整個視圖inclunding HTML,我建議Selenium IDE跨瀏覽器測試和專家爲快速和簡單的解決方案和Selenium Web Driver