我创建了一个将返回html帮助器TextBoxFor的扩展方法。现在我想对它进行单元测试,但它会抛出“对象引用未设置为对象的实例”。
扩展方法
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper htmlHelper, .......)
{
/* some logic here */
===> (Null Exception)
return htmlHelper.TextBoxFor(......);
}
HtmlHelper模拟是正确的,因为我已经在几个地方使用过它。
答案 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
有点晚了,但希望某人还可以。