1

我已根據說明herehere創建了自定義助手。這裏是什麼樣子(ThemeHelper.cs)一個片段:。在MVC3中測試自定義剃鬚刀助手

@inherits Helpers.HelperPage 
@using System.Web.Mvc 
@using System.Web.Mvc.Html 
@... 

@helper PathTo(string fileName) { 
    @Url.Content("~/Content/Themes/" + Theme.CurrentTheme.FolderName + "/" + fileName); 
} 

我放在這個在App_Code文件的指示,我可以在我的觀點,這就是我想要的使用這些傭工

現在我的問題是,如何測試這個東西?我不能,例如,反射性地得到ThemeHelper類的一個實例,無論是在目前的組裝,也不由反思訪問App_Code__Code組件(均未實際回報)。

理想情況下,我想以某種方式稱這些函數並驗證結果/ HTML。我有一個框架(C#版本的HtmlUnit 2.7),它允許我請求URL並驗證HTML。

有沒有辦法測試我的自定義幫手?我想編寫類似:

ThemeHelper h = new ThemeHelper(); // or: Assembly.CreateInstance(...) or something 
string html = h.PathTo("Site.css"); 
Assert.IsTrue(html.contains("Themes"); 

回答

0

現在的問題是,如何測試這個東西?

單元測試Razor Page助手是不容易的。

爲了具有單元測試和視圖不可知助手(不依賴於特定視圖發動機使用的是),則應該使用標準的HTML助手而來作爲一個擴展方法將HtmlHelperUrlHelper類。例如:

public static class UrlExtensions 
{ 
    public static string ThemeHelper(this UrlHelper urlHelper, string fileName) 
    { 
     return urlHelper.Content("~/Content/Themes/" + Theme.CurrentTheme.FolderName + "/" + fileName); 
    } 
} 
+0

問題是,我的視圖助手是其他開發人員在創建自定義視圖時(使用WordPress風格主題開發)使他們的生活更輕鬆的事情。我不能爲了一個普通的課而拋棄它,而不會失去語法的簡易性,或者我可以嗎? – ashes999

+0

@ashes999,確實在2之間找到合適的平衡點。應該使用Html助手來生成動態HTML代碼的短片段。他們可以進行單元測試。我個人從未使用剃刀助手。我更喜歡使用編輯器/顯示模板,我在其中調用我在類中定義的Html助手。 –

+0

@DarianDimitrov問題是,作爲一名API開發人員,我不想將調用混合到HtmlHelper和其他幫助器中;我想提供一個單獨的類,以便用戶可以一目瞭然地查看API。 – ashes999