Модульное тестирование метода расширения на HtmlHelper - PullRequest
5 голосов
/ 14 декабря 2009

У меня есть метод расширения HTMLHelper, который выводит HTML в Response.Write. Как лучше всего это проверить?

Я рассматриваю насмешку над HtmlHelper, переданным в метод, но не уверен, как мне следует проверить HTML, отправленный в Response.Write.

Спасибо

Ответы [ 3 ]

5 голосов
/ 14 декабря 2009

Если вы используете помощник HTML для вывода текста в браузер, почему бы не вернуть строку и, по вашему мнению, сделать что-то вроде ...

<%=Html.YourExtension() %>

Это делает его намного более тестируемым.

Доброжелательность,

Dan

EDIT:

Модификация будет изменением подписи

public static void YourExtension(this HtmlHelper html)
{
   ...
   Response.Write(outputSting);
}

до

public static string YourExtension(this HtmlHelper html)
{
   ...
   return outputSting;
}
1 голос
/ 25 мая 2012

Я использую следующий код для тестирования и валидации помощников HTML. Если вы делаете что-то сложное, например, одноразовые помощники на основе, такие как beginform или помощники с зависимостями, вам нужна более качественная тестовая среда, чем просто просмотр строки одного помощника.

Валидация является еще одним примером.

Попробуйте следующее:

        var sb = new StringBuilder();
        var context = new ViewContext();
        context.ViewData = new ViewDataDictionary(_testModel);
        context.Writer = new StringWriter(sb);
        var page = new ViewPage<TestModel>();
        var helper = new HtmlHelper<TestModel>(context, page);

        //Do your stuff here to exercise your helper


        //Get the results of all helpers
        var result = sb.ToString();

        //Asserts and string tests here for emitted HTML
        Assert.IsNotNullOrEmpty(result);
0 голосов
/ 22 июня 2011

Это работает, если метод «YourExtension» просто использует методы HtmlHelper, которые возвращают строку или HtmlString. Но такие методы, как «BeginForm», возвращают объект MvcForm, а также тег формы пишется непосредственно на TextWriter, на который ссылается HtmlHelper.

...