MissingMethodException error while trying to fake HtmlHelper using Moq

While trying to follow the article about taunting htmlhelper using Moq, I ran into the following problem. An exception was thrown for creating htmlhelper. I just assume that the lock windsor is being used (seeing an error message).

An exception:

MissingMethodException error occurred

Constructor of type "Castle.Proxies.ViewContextProxy" not found.

Stack trace:

in System.RuntimeType.CreateInstanceImpl (BindingFlags bindingAttr, middleware, Object [] args, CultureInfo culture, Object [] activationAttributes)

The code:

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

        Mock<IViewDataContainer> mockViewDataContainer = new Mock<IViewDataContainer>();
        mockViewDataContainer.Setup(v => v.ViewData).Returns(vd);

        return new HtmlHelper(mockViewContext.Object, mockViewDataContainer.Object);
    }

I am using ASP MVC 2, Moq 4.0 beta 3, VS2010 using the IDE testing environment.

How to solve the problem and return an instance of HtmlHelper?

+3
2

. :

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 Mock<TextWriter>().Object);

    mockViewContext.Setup(vc => vc.ViewData).Returns(vd);

    var mockViewDataContainer = new Mock<IViewDataContainer>();
    mockViewDataContainer.Setup(v => v.ViewData)
        .Returns(vd);

    return new HtmlHelper(mockViewContext.Object,
                            mockViewDataContainer.Object);
}

.

+1

MissingMethodException, MOQ Mock<>() .

ViewContext, , . , :

 public ViewContext(ControllerContext controllerContext, IView view, ViewDataDictionary viewData, TempDataDictionary tempData, TextWriter writer);

( TextWriter mock) :

   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 Mock<TextWriter>().Object);

PS MOQ Castle Dynamic Proxy , Castle , . Castle Windsor Dynamic Proxy, .

+6

Source: https://habr.com/ru/post/1758843/


All Articles