Nếu bất cứ ai đang tìm kiếm cách tạo HtmlHelper<T>
(đó là những gì tôi đã sau), đây là một thực hiện có thể giúp - loại của tôi là một lớp có tên mẫu :
public static HtmlHelper<Model> CreateHtmlHelper()
{
ViewDataDictionary vd = new ViewDataDictionary(new Model());
var controllerContext = new ControllerContext(new Mock<HttpContextBase>().Object,
new RouteData(),
new Mock<ControllerBase>().Object);
var viewContext = new ViewContext(controllerContext, new Mock<IView>().Object, vd, new TempDataDictionary(), new Mock<TextWriter>().Object);
var mockViewDataContainer = new Mock<IViewDataContainer>();
mockViewDataContainer.Setup(v => v.ViewData).Returns(vd);
return new HtmlHelper<Model>(viewContext, mockViewDataContainer.Object);
}
Hoặc một thực hiện chung chung hơn:
public HtmlHelper<T> CreateHtmlHelper<T>() where T : new()
{
var vd = new ViewDataDictionary(new T());
var controllerContext = new ControllerContext(new Mock<HttpContextBase>().Object,
new RouteData(),
new Mock<ControllerBase>().Object);
var viewContext = new ViewContext(controllerContext, new Mock<IView>().Object, vd, new TempDataDictionary(), new Mock<TextWriter>().Object);
var mockViewDataContainer = new Mock<IViewDataContainer>();
mockViewDataContainer.Setup(v => v.ViewData).Returns(vd);
return new HtmlHelper<T>(viewContext, mockViewDataContainer.Object);
}
buồn bã bưu lỗi trên blog nhưng giải thích ở trên khá tốt những gì bạn cần làm – MJJames
Hình như họ đã thay đổi các MV C framework một chút kể từ trên như ViewContext bây giờ mất một TextWriter cũng –
Điều này là siêu hữu ích, nhưng thử nghiệm chống lại MVC3 Tôi đã phải tinh chỉnh điều này bằng cách thêm một tham số mới vào mockViewContextConstructor (tôi đã sử dụng 'TextWriter.Null') và thay vì mockViewDataContainer, tôi phải đặt ViewData một cách rõ ràng (ví dụ: 'mockViewDataContainer.ViewData = viewData;') hoặc Rhino Mocks ném một ngoại lệ. –