【问题标题】:How to mock the 'Request.Cookies.AllKeys' in unit test c#如何在单元测试 c# 中模拟“Request.Cookies.AllKeys”
【发布时间】:2017-06-03 23:27:21
【问题描述】:

我需要在单元测试中获取下面提到的 cookie 中的值。

string[] myCookies = Request.Cookies.AllKeys;

值应为ASP.NET_SessionId__RequestVerificationToken

是否可以为它创建一个模拟。

【问题讨论】:

    标签: c# unit-testing cookies mocking session-cookies


    【解决方案1】:

    您可以创建一个封装所需信息的假 HttpContext

    private class MockHttpContext : HttpContextBase {
        private readonly MockRequest request;
        public MockHttpContext(HttpCookieCollection cookies) {
            this.request = new MockRequest(cookies);
        }
    
        public override HttpRequestBase Request {
            get {
                return request;
            }
        }
    
        public class MockRequest : HttpRequestBase {
            private readonly HttpCookieCollection cookies;
            public MockRequest(HttpCookieCollection cookies) {
                this.cookies = cookies;
            }
    
            public override HttpCookieCollection Cookies {
                get {
                    return cookies;
                }
            }
        }
    
    }
    

    并像这样使用

    //Arrange
    var cookies = new HttpCookieCollection();
    cookies.Add(new HttpCookie("ASP.NET_SessionId"));
    cookies.Add(new HttpCookie("__RequestVerificationToken"));
    
    var context = new MockHttpContext(cookies);
    var Request = context.Request;//This is just for demonstrative purposes
    
    string[] myCookies = Request.Cookies.AllKeys;
    

    或者您可以使用模拟框架来做同样的事情。

    此示例使用最小起订量

    var cookies = new HttpCookieCollection();
    cookies.Add(new HttpCookie("ASP.NET_SessionId"));
    cookies.Add(new HttpCookie("__RequestVerificationToken"));
    
    var mockHttpContext = new Mock<HttpContextBase>();
    mockHttpContext.Setup(m => m.Request.Cookies).Returns(cookies);
    

    这个例子使用了 NSubstitute

    var cookies = new HttpCookieCollection();
    cookies.Add(new HttpCookie("ASP.NET_SessionId"));
    cookies.Add(new HttpCookie("__RequestVerificationToken"));
    
    var mockHttpContext = Substitute.For<HttpContextBase>();
    mockHttpContext.Request.Cookies.Returns(cookies);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 2017-06-14
      • 2021-12-08
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多