2009-12-14 56 views
5

我有一個輸出HTML到Response.Write的HTMLHelper擴展方法。如何最好的單元測試呢?單元測試HtmlHelper上的擴展方法

我在考慮嘲諷傳入方法的HtmlHelper,但我不確定如何驗證發送給Response.Write的HTML。

感謝

回答

5

如果您使用的是HTML輔助函數輸出文本瀏覽器,爲什麼不把它返回一個字符串,並在您看來做這樣的事情......

<%=Html.YourExtension() %> 

它使一個更多的可測試性。

善良,

編輯:

的修改是將簽名的變化

public static void YourExtension(this HtmlHelper html) 
{ 
    ... 
    Response.Write(outputSting); 
} 

public static string YourExtension(this HtmlHelper html) 
{ 
    ... 
    return outputSting; 
} 
+0

Editted與所建議的修改 – 2009-12-14 10:51:01

0

這工作如果T他的方法「YourExtension」只是使用返回字符串或HtmlString的HtmlHelper方法。但是像「BeginForm」這樣的方法會返回MvcForm對象,並且表單標記也會直接寫在HtmlHelper引用的TextWriter上。

1

我使用下面的代碼來測試和驗證html助手。如果你正在做任何複雜的事情,比如beginform或helper等基於一次性的助手,你需要一個更好的測試框架,然後再看看單個助手的字符串。

驗證是另一個例子。

嘗試以下方法:

 var sb = new StringBuilder(); 
     var context = new ViewContext(); 
     context.ViewData = new ViewDataDictionary(_testModel); 
     context.Writer = new StringWriter(sb); 
     var page = new ViewPage<TestModel>(); 
     var helper = new HtmlHelper<TestModel>(context, page); 

     //Do your stuff here to exercise your helper 


     //Get the results of all helpers 
     var result = sb.ToString(); 

     //Asserts and string tests here for emitted HTML 
     Assert.IsNotNullOrEmpty(result);