Dav*_*Dev 34 asp.net-mvc nunit unit-testing html-helper moq
有人可以告诉我如何使用Moq创建模拟HTML Helper吗?
该文章有一篇文章的链接自称为说明这一点,但仅之后返回一个ASP.NET运行时错误链接
[编辑] 我问有关同一主题的一个更具体的问题在这里,但目前还没有得到任何回应.我认为它太具体了,所以我想我可以得到一个更一般的问题的更一般的答案,并修改它以满足我的要求.
谢谢
Tho*_*mas 45
这是另一篇文章,向您展示如何实现相同的目标:
Run Code Online (Sandbox Code Playgroud)public static HtmlHelper CreateHtmlHelper(ViewDataDictionary vd) { var mockViewContext = new Mock<ViewContext>( new ControllerContext( new Mock<HttpContextBase>().Object, new RouteData(), new Mock<ControllerBase>().Object), new Mock<IView>().Object, vd, new TempDataDictionary()); var mockViewDataContainer = new Mock<IViewDataContainer>(); mockViewDataContainer.Setup(v => v.ViewData).Returns(vd); return new HtmlHelper(mockViewContext.Object, mockViewDataContainer.Object); }
Cod*_*gue 19
在MVC5中,a ViewContext有一个额外的构造函数参数TextWriter,因此Thomas的代码不再有效.我添加了一个内存中的TextWriter来解决这个问题:
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 StreamWriter(new MemoryStream())
    );
    Mock<IViewDataContainer> mockDataContainer = new Mock<IViewDataContainer>();
    mockDataContainer.Setup(c => c.ViewData).Returns(vd);
    return new HtmlHelper(mockViewContext.Object, mockDataContainer.Object);
}
MrW*_*MrW 13
你能做的是:
HtmlHelper helper = null;
helper.YourHelperMethod();
不需要嘲笑任何东西.对我来说很棒.
| 归档时间: | 
 | 
| 查看次数: | 7556 次 | 
| 最近记录: |