加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在ASP.NET MVC中测试HtmlHelpers

发布时间:2020-12-15 18:46:27 所属栏目:asp.Net 来源:网络整理
导读:有没有办法(单位)测试我自己的HtmlHelpers?如果我想要自定义控件(由HtmlHelper呈现),并且我知道该控件的请求如何首先编写测试 – 然后编写代码?有没有一个特定的(好)的方法来做到这一点? 这值得吗? 解决方法 主要的问题是您必须模拟HtmlHelper,因为您
有没有办法(单位)测试我自己的HtmlHelpers?如果我想要自定义控件(由HtmlHelper呈现),并且我知道该控件的请求如何首先编写测试 – 然后编写代码?有没有一个特定的(好)的方法来做到这一点?

这值得吗?

解决方法

主要的问题是您必须模拟HtmlHelper,因为您可能正在使用帮助程序的方法来获取路由或值或返回另一个扩展方法的结果。 HtmlHelper类有很多属性,其中一些类似于ViewContext或当前Controller的复杂性。

This post from Ben Hart解释了如何用Moq创建这样的模拟。可以轻松地翻译成另一个模拟框架。

这是我的Rhino Mocks版本,适合于MVC框架中的变化。它没有完全测试,但它是为我工作,但不期望完美的结果:

public static HtmlHelper CreateHtmlHelper(ViewDataDictionary viewData)
    {
        var mocks = new MockRepository();

        var cc = mocks.DynamicMock<ControllerContext>(
            mocks.DynamicMock<HttpContextBase>(),new RouteData(),mocks.DynamicMock<ControllerBase>());

        var mockViewContext = mocks.DynamicMock<ViewContext>(
            cc,mocks.DynamicMock<IView>(),viewData,new TempDataDictionary());

        var mockViewDataContainer = mocks.DynamicMock<IViewDataContainer>();

        mockViewDataContainer.Expect(v => v.ViewData).Return(viewData);

        return new HtmlHelper(mockViewContext,mockViewDataContainer);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读