2011-03-01 51 views
4

非常簡單,我希望能夠測試一個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輸出的任何人可以提供任何建議的最佳途徑?

回答

2

你可以確保你的html輸出格式良好的xml。然後,在您的測試代碼中,將輸出加載到XmlDocument中,從而免除所有空白問題。然後你可以檢查所有的標籤是否真的存在,並且是它們應該在XmlDocument中的位置。

+0

感謝的是,沒想到裝成的XmlDocument的,可能工作 – Nathan 2011-03-01 16:06:41

+0

這也將自動執行代碼的良好性,儘管這可能在這裏沒什麼重要。 – 2011-03-01 16:14:42

+0

對不起,它花了一段時間很忙,但沒有回答你的答案,因爲它最適合我目前的情況。乾杯 – Nathan 2011-03-21 10:17:38

0

我會將它加載到HtmlAgilityPack然後或者查詢使用XPath或使用fizzler項目來執行一些QuerySelectorAll()jQuery樣式。

+0

我會否在CI服務器上遇到任何問題? – Nathan 2011-03-01 16:06:09

+0

不明白爲什麼 - 它不啓動瀏覽器或類似的東西。 – dez 2011-03-02 18:55:25