Проще говоря, я хочу иметь возможность проверить, что серверный элемент управления веб-форм Asp.Net выводит правильный HTML, поскольку он будет создавать динамический контент. Я только начинаю создавать элемент управления и хотел сделать это в стиле TDD, создавая HTML, который получает вывод.
Я создал отдельный класс для создания реального 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, кто-нибудь может предложить какие-либо предложения для лучшего пути вперед?