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

扩展方式

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

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


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

最佳答案

无需模拟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


有点晚了,但希望对某人来说还可以

10-04 12:02