我正在尝试测试HtmlHelper我编写的一些扩展方法.我的第一个问题是如何创建一个HtmlHelper实例,但我使用这个代码解决了这个问题:
private static HtmlHelper<T> CreateHtmlHelper<T>(T model)
{
var viewDataDictionary = new ViewDataDictionary(model);
var controllerContext = new ControllerContext(new Mock<HttpContextBase>().Object,
new RouteData(),
new Mock<ControllerBase>().Object);
var viewContext = new ViewContext(controllerContext, new Mock<IView>().Object, viewDataDictionary, new TempDataDictionary(), new Mock<TextWriter>().Object);
var mockViewDataContainer = new Mock<IViewDataContainer>();
mockViewDataContainer.Setup(v => v.ViewData).Returns(viewDataDictionary);
return new HtmlHelper<T>(viewContext, mockViewDataContainer.Object);
}
Run Code Online (Sandbox Code Playgroud)
我的几个测试现在工作正常,但有一个测试会引发异常.测试定义如下:
// Arrange
var inputDictionary = CreateDictionary();
var htmlHelper = CreateHtmlHelper(inputDictionary);
// Act
var actualHtmlString = htmlHelper.EditorFor(m => m.Dict, model).ToHtmlString();
...
Run Code Online (Sandbox Code Playgroud)
该EditorFor方法是我的扩展方法.在该方法的某处,进行以下调用:
tagBuilder.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(expression, metadata));
Run Code Online (Sandbox Code Playgroud)
从我的单元测试执行此代码时,抛出以下异常:
System.NullReferenceExceptionObject reference …Run Code Online (Sandbox Code Playgroud)