Wie Unit-Tests HtmlHelper mit Moq?
Könnte jemand mir zeigen, wie würden Sie gehen über das erstellen von mock-HTML-Helfer mit Moq?
Diese Artikel hat einen link zu einem Artikel behauptet, um dies zu beschreiben, aber der folgende link gibt nur eine ASP.NET Runtime Error
[Bearbeiten]
Ich fragte eine spezifische Frage in Bezug auf den gleichen Gegenstand hier, aber es ist noch nicht dazu gekommen alle Antworten. Ich dachte, es war zu spezifisch, so dass ich dachte, ich könnte eine Allgemeine Antwort auf eine Allgemeine Frage, und ändern Sie erfüllen meine Anforderungen.
Dank
- Können Sie einige der code unter test?
- relevante code ist in der Frage, die ich verlinkt in meinem edit.
- Ich eigentlich don ' T wissen, eine gute Antwort (nicht wirklich daran erinnern die details von c#), aber ich von Ihnen positiv bewertet werden, es in einem Versuch, einige Aufmerksamkeit auf sich =)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun können ist dieses:
Keine Notwendigkeit, zu verhöhnen, nichts. Funktioniert Brillant für mich.
ViewContext
,RouteCollection
, oder irgendetwas anderes, das nicht hilft.Hier's ein weiterer Artikel, der zeigt, wie Sie, das gleiche zu erreichen:
In MVC5, die
ViewContext
hat einen zusätzlichen Konstruktor-parameter für einenTextWriter
, so Thomas' code nicht mehr funktioniert. Ich fügte hinzu, eine in-memory-TextWriter, dieses problem zu umgehen:public static HtmlHelper CreateHtmlHelper(ViewDataDictionary vd, object clientData)
und der return-Zeile aufvar htmlHelper = new HtmlHelper(mockViewContext.Object, mockViewDataContainer.Object); htmlHelper.ViewBag.Client = clientData; return htmlHelper;
ViewContext
hier. Es scheint, dassvc
ist nie benutzt.var mockViewContext = new Mock<ViewContext>( new ControllerContext( new Mock<HttpContextBase>().Object, new RouteData(), new Mock<ControllerBase>().Object), Mock.Of<IView>(), vd, new TempDataDictionary(), new StringWriter()) { CallBase = true };
Testen von Einweg-Helfer wie BeginForm mit Zugang zu ViewContext.Schriftsteller diese:
System.NullReferenceException
. "Der Objektverweis wurde nicht auf eine Instanz eines Objekts". Irgendeine Idee?CallBase
auf true gesetzt ist auf dem mock-Objekt so, dass die Eigenschaften richtig eingestellt sind. Sollten Sie das nicht tun müssenmockViewContext.Setup(vc => vc.Writer).Returns(textWriter);
entweder.