非常簡單,我希望能夠測試一個Asp.Net Web窗體服務器控件正在輸出正確的Html,因爲它將構建動態內容。我剛剛開始創建控件,並希望以TDD風格構建可獲取輸出的Html。來自HtmlTextWriter的測試輸出
我創建了一個單獨的類來完成實際的Html構建,以便能夠在正常的Asp.Net管道之外進行隔離測試。
在我的單元測試,我可以控制什麼是返回HTML,但我在確認HTML包含我期待例如標記問題:
<div id="wrapper">
<div id="fields">
</div>
<div id="main">
</div>
</div>
和我使用NUnit我會希望能夠存儲從服務器控件的輸出,並通過使用Is.StringMatching喜歡測試:
Assert.That(output, Is.StringMatching("<div id=\"main\">.*?</div>"));
這不幸的是不會的,因爲額外的\ r \ n \ t說明了HtmlTextwriter
輸出工作。
我目前使用它的方式是通過創建一個StringWriter
,然後用它來創建HtmlTextWriter
這樣的:
stringWriter = new StringWriter();
htmlTextWriter = new HtmlTextWriter(stringWriter);
,然後我把下面的方法:
public string Build(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, "wrapper");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.AddAttribute(HtmlTextWriterAttribute.Id, "fields");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderEndTag();
writer.WriteLine();
writer.AddAttribute(HtmlTextWriterAttribute.Id, "main");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderEndTag();
writer.RenderEndTag();
return writer.InnerWriter.ToString();
}
隨着Html變得更復雜,我可以預見更多的問題,驗證輸出是否正確。
另一個約束是需要能夠通過CI服務器運行測試(很可能是TeamCity),因此所有代碼或引用的庫都需要在我的解決方案中。
我已經做了相當多的谷歌搜索,但似乎無法找到關於如何測試Html輸出的任何人可以提供任何建議的最佳途徑?
感謝的是,沒想到裝成的XmlDocument的,可能工作 – Nathan 2011-03-01 16:06:41
這也將自動執行代碼的良好性,儘管這可能在這裏沒什麼重要。 – 2011-03-01 16:14:42
對不起,它花了一段時間很忙,但沒有回答你的答案,因爲它最適合我目前的情況。乾杯 – Nathan 2011-03-21 10:17:38