我有一個輸出HTML到Response.Write的HTMLHelper擴展方法。如何最好的單元測試呢?單元測試HtmlHelper上的擴展方法
我在考慮嘲諷傳入方法的HtmlHelper,但我不確定如何驗證發送給Response.Write的HTML。
感謝
我有一個輸出HTML到Response.Write的HTMLHelper擴展方法。如何最好的單元測試呢?單元測試HtmlHelper上的擴展方法
我在考慮嘲諷傳入方法的HtmlHelper,但我不確定如何驗證發送給Response.Write的HTML。
感謝
如果您使用的是HTML輔助函數輸出文本瀏覽器,爲什麼不把它返回一個字符串,並在您看來做這樣的事情......
<%=Html.YourExtension() %>
它使一個更多的可測試性。
善良,
丹
編輯:
的修改是將簽名的變化
public static void YourExtension(this HtmlHelper html)
{
...
Response.Write(outputSting);
}
到
public static string YourExtension(this HtmlHelper html)
{
...
return outputSting;
}
這工作如果T他的方法「YourExtension」只是使用返回字符串或HtmlString的HtmlHelper方法。但是像「BeginForm」這樣的方法會返回MvcForm對象,並且表單標記也會直接寫在HtmlHelper引用的TextWriter上。
我使用下面的代碼來測試和驗證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);
Editted與所建議的修改 – 2009-12-14 10:51:01