ASP.NET MVC - модульное тестирование HTML, созданного TagBuilders - PullRequest
3 голосов
/ 19 августа 2011

У меня есть код, который генерирует html через TagBuilders Как я могу проверить, генерируется ли правильный HTML? Мой TagBuilder не так прост, как один тег, он также содержит другие теги. Итак, у меня есть функция, которая возвращает объект TagBuilder со следующим HTML

<div> 
   <input type="checkbox" name=".." /> <label for=".." />
   <input type="checkbox" name=".." /> <label for=".." />
   <input type="checkbox" name=".." /> <label for=".." />
<div/>

Итак, чтобы проверить, есть ли у нас первый флажок, мы делаем:

Assert.True(MyTag.InnerHtml.Contains("<input type="checkbox" name=".." />");  

Это кажется неправильным. Есть ли другой способ сделать это?

1 Ответ

3 голосов
/ 19 августа 2011

Что вы можете сделать, это использовать HtmlAgilityPack , чтобы сгенерировать HtmlDocument вашего тега, затем выполнить запросы для получения количества элементов и т. Д.

HtmlDocument document = new HtmlDocument();
document.LoadHtml(MyTag.ToString());

var checkBoxCount = document.DocumentNode.DescendantNodes()
                    .Where(item => item.Name == "input" && item.GetAttributeValue("name", string.Empty) == "..")
                    .Count();

Assert.True(checkBoxCount == 3); 

Вы можете очистить вызовы, используя метод, который принимает документ и функцию предиката и возвращает количество элементов.

При таком подходе вы должны быть осторожны, чтобы вывод Html ваших методов был действительным, в противном случае HtmlAgilityPack попытается исправить это за вас, что приведет к странным проблемам с тестированием.

...