.net mvc2 пользовательское тестирование модуля расширения HtmlHelper - PullRequest
8 голосов
/ 16 октября 2010

Моя цель - иметь возможность модульного тестирования некоторых пользовательских расширений HtmlHelper, которые используют RenderPartial для внутреннего использования.

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

Я пытался использовать метод выше, чтобы издеваться над HtmlHelper. Тем не менее, я сталкиваюсь с исключениями значения Null. «Имя параметра: просмотр»

Кто-нибудь есть идеи? Спасибо.

Ниже приведены идеи кода:

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

Ответы [ 2 ]

3 голосов
/ 16 октября 2010

Проверьте это ... это отличная статья http://blogs.teamb.com/craigstuntz/2010/09/10/38638/

2 голосов
/ 22 октября 2012

Я столкнулся с той же проблемой.Когда я передаю аргументы в новый Mock (), он не устанавливает их правильно.Вам необходимо установить их явно:

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