2010-10-15 3 views
8

Mein Ziel ist es, in der Lage zu testen einige benutzerdefinierte HtmlHelper Erweiterungen - die intern RenderPartial verwenden..net mvc2 benutzerdefinierte HtmlHelper-Erweiterung Einheit testen

http://ox.no/posts/mocking-htmlhelper-in-asp-net-mvc-2-and-3-using-moq

Ich habe versucht, über das Verfahren unter Verwendung der Htmlhelper zu verspotten. Ich gehe jedoch in Null-Wert-Ausnahmen. "Parametername: view"

Wer hat eine Idee ?? Vielen Dank.

Im Folgenden sind die Ideen des Codes:

[TestMethod] 
    public void TestMethod1() 
    { 
     var helper = CreateHtmlHelper(new ViewDataDictionary()); 
     helper.RenderPartial("Test"); // supposingly this line is within a method to be tested 
     Assert.AreEqual("test", helper.ViewContext.Writer.ToString()); 
    } 


    public static HtmlHelper CreateHtmlHelper(ViewDataDictionary vd) 
    { 
     Mock<ViewContext> mockViewContext = new Mock<ViewContext>(
      new ControllerContext(
       new Mock<HttpContextBase>().Object, 
       new RouteData(), 
       new Mock<ControllerBase>().Object), 
      new Mock<IView>().Object, 
      vd, 
      new TempDataDictionary(), 
      new StringWriter()); 
     var mockViewDataContainer = new Mock<IViewDataContainer>(); 
     mockViewDataContainer.Setup(v => v.ViewData) 
      .Returns(vd); 
     return new HtmlHelper(mockViewContext.Object, 
           mockViewDataContainer.Object); 
    } 
+0

Sie müssen weitere Details veröffentlichen, damit wir das Problem reproduzieren können. Ich habe den oben erwähnten Code (ich schrieb ihn) zum Testen von Controllern verwendet, die Ansichten mit 'RenderPartial' ohne Probleme darstellen. –

Antwort

2

ich das gleiche Problem gegenüber. Wenn ich die Argumente an new Mock() übergebe, werden sie nicht richtig gesetzt. Sie müssen sie explizit einrichten:

mockViewContext.Setup(v => v.View).Returns(new Mock<IView>().Object); 
mockViewContext.Setup(v => v.ViewData).Returns(viewData); 
mockViewContext.Setup(v => v.TempData).Returns(new TempDataDictionary()); 
mockViewContext.Setup(v => v.Writer).Returns(writer);