Тестовый вывод из HtmlTextWriter - PullRequest
4 голосов
/ 01 марта 2011

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

Ответы [ 3 ]

2 голосов
/ 01 марта 2011

Вы можете убедиться, что ваш вывод html является правильно сформированным xml. Затем в своем тестовом коде загрузите вывод в XmlDocument, таким образом, вы свободны от всех проблем с пробелами. Затем вы можете проверить, что все теги действительно есть и находятся там, где они должны быть, с XmlDocument.

0 голосов
/ 02 марта 2011

Встроенная возможность Gallio / MbUnit для проверки XML и HTML может помочь вам.

0 голосов
/ 01 марта 2011

Я бы загрузил его в HtmlAgilityPack , а затем либо запросил бы это, используя XPath, либо использовал проект fizzler , чтобы выполнить какой-нибудь стиль QuerySelectorAll () jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...