单元测试HtmlHelper自定义TextBoxFor

时间:2011-04-08 11:06:14

标签: asp.net-mvc-3 unit-testing html-helper

我创建了一个将返回html帮助器TextBoxFor的扩展方法。现在我想对它进行单元测试,但它会抛出“对象引用未设置为对象的实例”。

扩展方法

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper htmlHelper,     .......)
{

    /* some logic here */
    ===> (Null Exception) 
    return htmlHelper.TextBoxFor(......);
}

HtmlHelper模拟是正确的,因为我已经在几个地方使用过它。

1 个答案:

答案 0 :(得分:6)

无需模拟HtmlHelper。您可以创建一个虚假的视图模型类,例如TestViewModel,并在您的单元测试中执行以下操作:

//-- Arrange
TestViewModel testViewModel = new TestViewModel()
            {
                Name = "sdfsd"
            };

IViewDataContainer dataContainerMock = MockRepository.GenerateStub<IViewDataContainer>();

dataContainerMock.ViewData = new ViewDataDictionary<TestViewModel>(testViewModel);

HtmlHelper<TestViewModel> myHelper =  new HtmlHelper<TestViewModel>(new ViewContext()
            {
                ViewData = new ViewDataDictionary<TestViewModel>(this._testViewModelWithoutMaxLength)
            }, this._dataContainerMock);

//-- Act 
MvcHtmlString result = //call your extension

//-- Assert 
//add asserts here

有点晚了,但希望某人还可以。