Asp.Net Mvc HtmlHelper тестирование VeiwContext.Writer.WriteLine - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть HtmlHelper, который используется для вывода некоторых функций стиля аккордеона.Этот помощник будет широко использоваться по всему сайту.

Код, используемый для создания этой функциональности, широко использует TagBuilder, и, конечно, мы выводим html, используя:

htmlHelper.ViewContext.Writer.WriteLine(someTag.ToString(TagRenderMode.StartTag));

У нас есть несколько помощников, которые используют этот шаблон, и этоработает отлично.

Пока все хорошо - это именно то, что я хочу.Однако - тестирование оказывается кошмаром.как мне проверить htmlHelper.ViewContext.Writer.WriteLine?

мы используем xUnit и Moq, если это имеет значение

Ответы [ 2 ]

1 голос
/ 27 февраля 2012
var viewContext = new ViewContext();
var viewContextWriter = new Mock<TextWriter>();
var text = string.Empty;
viewContextWriter.Setup(m => m.WriteLine(It.IsAny<string>()))
    .Callback((string s) => text += s);
viewContext.Writer = viewContextWriter.Object;
var html = new HtmlHelper(viewContext, new FakeViewDataContainer());

private class FakeViewDataContainer : IViewDataContainer
{
    private ViewDataDictionary _viewData = new ViewDataDictionary();
    public ViewDataDictionary ViewData
    {
        get { return _viewData; }
        set { _viewData = value; }
    }
}

Когда вы утверждаете, все, что записано в Writer.WriteLine, будет в переменной text текстового метода.

0 голосов
/ 25 мая 2012

используйте следующий код для тестирования и проверки помощников HTML.

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

Попробуйте выполнить следующее:

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

//Following example contains two helpers that are being tested
//A MyCustomBeginForm Helper and a OtherCoolHelperIMade Helper
using(helper.MyCustomBeginForm("secretSauce"))
{
   helper.ViewContext.Writer.WriteLine(helper.OtherCoolHelperIMade("bigMacSauce"));
}
//End Example

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

//Asserts and string tests here for emitted HTML
Assert.IsNotNullOrEmpty(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...