2010-10-15 4 views
8

Moim celem jest możliwość przetestowania niestandardowych rozszerzeń HtmlHelper, które używają wewnętrznie RenderPartial..mcc2 niestandardowe urządzenie testowe HtmlHelper testowanie

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

Próbowałem przy użyciu metody powyżej mock HtmlHelper. Jednak uruchamiam wyjątki wartości Null. "Nazwa parametru: view"

ktoś ma jakiś pomysł ?? Dzięki.

Poniżej przedstawiamy pomysły kodu:

[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

Będziesz musiał opublikować więcej szczegółów, abyśmy mogli odtworzyć problem. Użyłem wyżej wymienionego kodu (napisałem to) do testowania kontrolerów, które renderują widoki z 'RenderPartial' bez problemów. –

Odpowiedz

2

byłem stoi ten sam problem. Kiedy przekazuję argumenty do nowej makiety(), nie ustawiam ich poprawnie. Musisz je jawnie ustawić:

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