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

c# – 构建一个HttpContext进行测试,我如何指定HttpRequest是一

发布时间:2020-12-15 17:38:33 所属栏目:百科 来源:网络整理
导读:我正在为一个以HttpContext作为参数的方法编写一些单元测试.我想测试当请求是POST时,行为是如预期的. 创建System.Net.HttpWebRequest时,很容易设置方法,但是在创建一个System.Web.HttpRequest时,我看不到一种方法来指定该方法,这是HttpContext中使用的. 有任
我正在为一个以HttpContext作为参数的方法编写一些单元测试.我想测试当请求是POST时,行为是如预期的.

创建System.Net.HttpWebRequest时,很容易设置方法,但是在创建一个System.Web.HttpRequest时,我看不到一种方法来指定该方法,这是HttpContext中使用的.

有任何想法吗?

对于上下文,该方法由httphandler调用,如果该请求不是POST,则该方法应该抛出一个405.我知道我可以使用web.config中的Verbs属性来过滤可允许的方法,但是我将来会阻止某人在将来更改动词属性,以允许其他方法,我希望处理程序能够照顾它本身.

目前使用的助手方法:

private HttpContext GetHttpContext(string requestUrl)
    {
        var httpRequest = new HttpRequest("",requestUrl,"");            
        var stringWriter = new StringWriter();
        var httpResponce = new HttpResponse(stringWriter);
        return new HttpContext(httpRequest,httpResponce);
    }

解决方法

我建议研究嘲笑对象,以进行单元测试. .NET提供了一些可用于这种类型的测试的嘲弄框架.

例如,文章here使用Moq框架设置HttpMethod.

从文章:

public ContextMocks(Controller onController,string HTTPMethod)
{
    //...
    Request = new Moq.Mock<HttpRequestBase>();
    Request.Setup(x => x.HttpMethod).Returns(HTTPMethod);
    //...
}

也就是说,如果这是一次性测试,我不能强调,在您的特定情况下,引入对象嘲笑的开销是不必要的,以下反映将设置HttpMethod:

typeof(HttpRequest).GetField("_httpMethod",BindingFlags.NonPublic | BindingFlags.Instance).SetValue(httpRequest,"POST");

如前所述,如果使用HttpContext,HttpRequest等进行测试是或将成为一个重复的主题,那么可以利用一个嘲笑的框架.从长远来看,你将节省自己的时间.

(编辑:李大同)

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

    推荐文章
      热点阅读