2008-11-27 130 views
6

我試圖在單元測試中生成視圖,但我無法繞過缺少的VirtualPathProvider。大多數viewengines使用從當前HostingEnvironment獲取提供者的VirtualPathProviderViewEngine基類。如何在asp.net-mvc單元測試中生成視圖?

protected VirtualPathProvider VirtualPathProvider { 
    get { 
     if (_vpp == null) { 
      _vpp = HostingEnvironment.VirtualPathProvider; 
     } 
     return _vpp; 
    } 
    set { 
     _vpp = value; 
    } 
} 

在單元測試中沒有HostingEnvironment,即使我創建一個沒有當前的VirtualPathProvider。

我該如何解決這個問題?我必須創建一個自定義FakeWebFormViewEngine嗎?

+0

你有沒有找到答案?我遇到了同樣的問題:-) – 2009-02-02 21:17:04

+0

2012年10月。即使所有的評論歸結爲「你測試它錯了!」,人們可能仍然對實際測試依賴於VirtualPathProvider的機制感興趣。所以只是好奇:任何人都到了那裏? – 2012-10-15 14:45:47

回答

0

我試圖做到這一點。不幸的是,這不僅僅是VirtualPathProvider(VPP)問題。 VPP用於將視圖或局部視圖映射到物理路徑以確定文件的存在。不幸的是,ViewContext以虛擬路徑結束,而不是物理路徑,所以當渲染視圖時,Builder使用不存在的HostingEvnironment的屬性。

如果您在測試中使用Visual Studio版本,則可以使用Web單元測試。這將允許您使用瀏覽器調用URL,然後解析響應以檢查值。

0

對不起,如果這聽起來很無知,但生成視圖的目的是什麼?我可能會錯過一些東西,但單元測試的主要重點是「測試單元」。在正確設置的ASP.NET MVC應用程序中,需要測試的代碼位於控制器及其下方。事實上,我會說,如果開發得當,它就在下面。

該視圖的測試是用戶驗收測試。無論如何,我認爲自動化這一點沒什麼問題,但我不確定這是必須通過單元測試來完成的事情。

我錯過了什麼嗎?

2

VS Team System 2010中有一些功能用於驗收測試,它適用於您正在嘗試執行的操作。正如Gregory A Beamer所提到的,MVC的單元測試是對控制器完成的。您還可以測試模型,具體取決於您如何實施模型。

這是有很多爭議的地方。有些人將模型視爲業務實體,我將其視爲特定於View的模型表示。更多的視圖模型。由於我的模型中沒有真正的功能,我不必測試它。我測試了我的DAL,MVC之外的業務邏輯層。 MVC確實是表示層的所有部分。它是你的演示文稿的分層而不是你的應用程序。你仍然層疊你的應用程序。

就單元測試而言,控制器就是您測試的地方。如果有需要測試的方法,您可以測試您的模型。至於他們的觀點,他們接受用戶的測試或通過像Watin這樣的自動化測試。

0

您可以嘗試Ivonna進行測試您的視圖的整合(並在某種程度上,單位)。