ASP.NET MVC - модульное тестирование HTML, сгенерированного TagBuilders

У меня есть код, который генерирует 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 ответ

Что вы можете сделать, это использовать 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 попытается исправить это для вас, что приведет к странным проблемам с тестированием.

Другие вопросы по тегам