测试MVC之Mock HttpContext

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 17:11 点击:

 

在Web 中进行测试驱动的开发,比较大的困难是模拟HttpContext ,它太复杂了。

moq 框架提供了强大的模拟能力,但是,模拟一个HttpContext 对象还是需要自己来动手。

为此,我自己写了一个方法来完成这个工作。其中,还顺便使用Log4Net 来输出一下它的工作情况。

view sourceprint?

01    /// <summary>

02    /// 创建上下文模拟对象 

03    /// 至少需要支持

04    ///     Request 中

05    ///         AppRelativeCurrentExecutionFilePath,

06    ///         ApplicationPath

07    ///         PathInfo

08    ///     Response 中

09    ///         ApplyAppPathModifier

10    /// </summary>

11    /// <returns></returns>

12    private Moq.Mock<System.Web.HttpContextBase> CreateHttpContext()

13    {

14        log4net.ILog log = log4net.LogManager.GetLogger("CreateHttpContext");

15     

16        string ApplicationPath = "/";

17        string PathInfo = "";

18        string AppRelativeCurrentExecutionFilePath = "~/";

19     

20        var contextMock = new Moq.Mock<System.Web.HttpContextBase>();

21     

22        contextMock

23            .Setup(c => c.Request.AppRelativeCurrentExecutionFilePath)

24            .Returns(AppRelativeCurrentExecutionFilePath)

25            .Callback(() => log.Info("Calling AppRelativeCurrentExecutionFilePath"));

26     

27        contextMock

28            .Setup(c => c.Request.ApplicationPath)

29            .Returns(ApplicationPath)

30            .Callback(() => log.Info("Calling ApplicationPath"));

31        contextMock.Setup(rc => rc.Request.PathInfo)

32            .Returns(PathInfo)

33            .Callback(() => log.Info("Calling PathInfo"));

34     

35        contextMock

36            .Setup(rc => rc.Response.ApplyAppPathModifier(Moq.It.IsAny<string>()))

37            .Returns((string s) => s)

38            .Callback((string s) => log.InfoFormat("Calling ApplyAppPathModifier: {0}.", s));

39     

40        return contextMock;

41    }

虽然这个方法已经能够完成我需要的测试,但是,我希望能将它提炼一下,得到一个更加通用的Mock 方法。

很快,我发现这个工作已经在很久以前被Scott Hanselman 介绍过一次了,其中甚至还写了不同的Mock 框架下的提供方法。不过moq 版本的作者不是他,而是另外一个人Daniel Cazzulino, 这

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • asp.net 设置GridView的选中行的实现代码
    • C#高级编程:数据库连接[1]
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET&#160;GridView列表代码示例
    • Asp.net MVC源码分析--Action Filter的链式调用
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1