किसी को भी कैसे HtmlHelper<T>
बनाने के लिए (कि क्या मैं के बाद थी) की तलाश में है, तो यहां एक कार्यान्वयन है कि मदद कर सकता है है - मेरी प्रकार एक वर्ग नामित मॉडल है :
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);
}
या एक अधिक सामान्य कार्यान्वयन:
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);
}
उदासी ब्लॉग पोस्ट त्रुटियों लेकिन इसके बाद के संस्करण काफी अच्छी तरह से आप – MJJames
क्या करने की जरूरत बताते हैं जैसे वे एमवी बदल दिया है लगता है उपरोक्त के बाद से सी फ्रेमवर्क, व्यूकॉन्टेक्स्ट के रूप में अब एक टेक्स्टवाइटर भी लेता है –
यह बहुत उपयोगी है, लेकिन एमवीसी 3 के खिलाफ परीक्षण करने के लिए मुझे mockViewContextConstructor (मैंने 'TextWriter.Null'' का उपयोग करने के लिए एक नया पैरामीटर जोड़कर इसे ट्वीक करना पड़ा था और इसके बजाय mockViewDataContainer, मुझे स्पष्ट रूप से ViewData सेट करना था (उदाहरण के लिए, 'mockViewDataContainer.ViewData = viewData; ') या राइनो मोक्स एक अपवाद फेंकता है। –