dot*_*ner 7 c# asp.net tdd moq httpcontext
我正在尝试创建一个包装类来处理HttpContext的内容.我正在创建一个cookie但无法添加到HttpContext.Request或Response cookies集合.
我正在使用Moq.我也使用以下链接中的MvcMockHelp:http: //www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
当我尝试在以下代码中添加到Cookies集合时:
HttpContextBase c1 = MvcMockHelpers.FakeHttpContext();
HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "Tom";
c1.Request.Cookies.Add(aCookie); <------ Error here
Run Code Online (Sandbox Code Playgroud)
我在第4行代码c1.Request.Cookies.Add(aCookie)上得到以下错误;
Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)
我也试过如下实例化上下文对象,但仍然没有运气
HttpContextBase c = MvcMockHelpers.FakeHttpContext
("~/script/directory/NAMES.ASP?city=irvine&state=ca&country=usa");
Run Code Online (Sandbox Code Playgroud)
我看到Request中的Cookies集合是NULL.我如何实例化它?
我也试过以下但没有运气.
c1.Request.Cookies["userName"].Value = "Tom";
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么.
看看Hansleman的代码,该Request属性是作为一个创建的Mock,但是,该mock的属性没有设置,所以这就是为什么Cookies是null,你不能设置它,因为它是一个只读属性.
您有两种选择:
Cookies在FakeHttpContext()
方法中设置属性的模拟,或如果你不想这样做,说你直接引用库,那么你可以简单地重建的嘲笑HttpRequestBase从HttpContextBase您可以访问,就像这样:
[Test]
public void SetCookie()
{
var c1 = MvcMockHelpers.FakeHttpContext();
var aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = "Tom";
var mockedRequest = Mock.Get(c1.Request);
mockedRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());
c1.Request.Cookies.Add(aCookie);
Debug.WriteLine(c1.Request.Cookies["userInfo"].Value);
}
Run Code Online (Sandbox Code Playgroud)
Mock.Get(object) 将为您返回模拟,然后您可以在其上设置cookie并使用它.
一般来说,你可以重新创建一个Object到它Mock通过使用静态方法Get(MockedThing.Object)
| 归档时间: |
|
| 查看次数: |
9084 次 |
| 最近记录: |