2010-10-15 17 views
8

Mi objetivo es poder probar algunas extensiones HtmlHelper personalizadas, que utilizan RenderPartial internamente..net mvc2 prueba de unidad de extensión HtmlHelper personalizada

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

He intentado usar el método anterior para burlarse de la HtmlHelper. Sin embargo, me encuentro con excepciones de valor Nulo. "Nombre del parámetro: ver"

¿Alguien tiene alguna idea? Gracias.

A continuación se presentan las ideas del código:

[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

Deberá publicar más detalles para que podamos reproducir el problema. He usado el código antes mencionado (lo escribí) para probar controladores que representan las vistas con 'RenderPartial' sin problemas. –

Respuesta

2

que estaba frente a la misma cuestión. Cuando paso los argumentos al nuevo Mock(), no los está configurando correctamente. Debe configurarlos explícitamente:

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); 
Cuestiones relacionadas